回答
我真的很努力工作了什么你的SQL试图摆在首位。
它似乎是在最小和最大秒之间(好的,比最大日期时间多1秒)获得每秒钟的时间,并获得记录的数量。
如果是这样,那么最多〜1000秒应对: -
SELECT ADDDATE(MinCallDate, INTERVAL Sub1.i SECOND) AS aDate, COUNT(*)
FROM
(
SELECT MIN(calldate) AS MinCallDate, MAX(calldate) AS MaxCallDate
FROM calls
)Sub0
CROSS JOIN
(
SELECT units.i + tens.i * 10 + hundreds.i * 100 as i
FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) hundreds
) Sub1
INNER JOIN
(
SELECT calldate, ADDDATE(calldate, INTERVAL billsec SECOND) AS callenddate
FROM calls
) b
ON DATE_FORMAT(ADDDATE('2013-05-14 09:40:30', INTERVAL Sub1.i SECOND),"%Y%m%d%H%i%s") BETWEEN b.calldate AND b.callenddate
WHERE ADDDATE(MinCallDate, INTERVAL Sub1.i SECOND) <= MaxCallDate
AND Sub1.i < TIMESTAMPDIFF(SECOND,'2013-05-14 09:40:30', '2013-05-14 09:41:00')
GROUP BY aDate
如果你能提供你正在努力实现我也许能拿出更好的东西什么的非SQL解释。
编辑 - 很简单的计数: -
SELECT Sub1.TimeSecond, COUNT(Sub2.CallSecond)
FROM
(
SELECT ADDDATE('2013-05-14 09:40:30', INTERVAL units.i + tens.i * 10 + hundreds.i * 100 + thousands.i * 1000 SECOND) AS TimeSecond
FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) hundreds
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) thousands
HAVING TimeSecond BETWEEN '2013-05-14 09:40:30' AND '2013-05-14 09:41:00'
) Sub1
LEFT OUTER JOIN
(
SELECT ADDDATE(calldate, INTERVAL units.i + tens.i * 10 + hundreds.i * 100 + thousands.i * 1000 SECOND) AS CallSecond
FROM calls
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) hundreds
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) thousands
WHERE units.i + tens.i * 10 + hundreds.i * 100 + thousands.i * 1000 <= billsec
) Sub2
ON Sub1.TimeSecond = Sub2.CallSecond
GROUP BY Sub1.TimeSecond
这将应付的范围/手机通话9999秒(易于扩展它更大的范围内,但会使其速度较慢但不能肯定。所有这些都将是有效,因为MySQL不能真正使用索引的任何连接
简单会是这样,因为它不是每个通话时长中产生,每次: - 。
SELECT Sub1.TimeSecond, COUNT(calls.calldate)
FROM
(
SELECT ADDDATE('2013-05-14 09:40:30', INTERVAL units.i + tens.i * 10 + hundreds.i * 100 + thousands.i * 1000 SECOND) AS TimeSecond
FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) hundreds
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) thousands
HAVING TimeSecond BETWEEN '2013-05-14 09:40:30' AND '2013-05-14 09:41:00'
) Sub1
LEFT OUTER JOIN calls
ON Sub1.TimeSecond BETWEEN calls.calldate AND ADDDATE(calls.calldate, INTERVAL calls.billsec SECOND)
GROUP BY Sub1.TimeSecond
你可以改变表格的布局吗?如果是这样,为呼叫结束日期时间添加一列可能会有所帮助。
我需要计算给定时间间隔的呼叫峰值数,实际上一行需要在两次之间为一秒,如果我设置了一个时间间隔,例如2013-05-14 09:00:00至2013-05- 14 10:00:00需要有3600条记录。我还没有想过如何优化一个查询比现在更快:)。谢谢 –
所以表格调用每次调用一行,包括该调用的开始时间和该调用的长度。您需要2个日期/时间之间的所有时间(以秒为单位)以及此时当前的电话数量的计数? – Kickstart
正确的是,此刻当前呼叫数量的计数 –
- 1. 相关的mysql子查询
- 2. 相关子查询的MySQL
- 3. MySQL相关子查询FROM
- 4. MySQL相关子查询
- 5. mySQL相关子查询
- 6. MySQL的:相关子查询选择类型关联子查询
- 7. 将SQL查询(与相关子查询)转换为LINQ在C#
- 8. MYSQL查询相关查询
- 9. MySQL的相关子查询SUM()ORDER BY
- 10. MySQL的 - 在相关子查询
- 11. MySQL中的索引相关子查询
- 12. MySql的相关子查询执行
- 13. 如何用非相关子查询替换相关的子查询?
- 14. mysql相关查询
- 15. 变换相关子查询转换为连接
- 16. 如何将包含dublicate表的相关子查询转换为不相关的子查询?
- 17. 相关子查询
- 18. 相关子查询
- 19. 与查询相关的MySQL查询
- 20. MySQL相关子查询:子查询无法从外部查询中查找表?
- 21. Mysql将子查询转换为依赖子查询
- 22. 将mysql子查询转换为Laravel
- 23. Mysql子查询转换内部联接
- 24. 转换mysql子查询加入
- 25. 与子查询转换MySQL来DQL 1.2
- 26. LINQ的相关子查询
- 27. 将常规选择语句转换为相关子查询?
- 28. 转换MySQL查询SQLite的查询
- 29. 转换的Oracle查询到MySQL查询
- 30. 转换查询有mysql的
你想要返回什么? – Kickstart