我有 MySql 数据库,其中包含许多带有日期(时间戳)和更多属性的记录。例如,“testTable”看起来像
a varchar(255)
b int(11)
时间戳 bigint(20)
我需要在 1 月 1 日至 1 月 15 日的一段时间内每天找到 sum(b) 的前 10 名,这些日期可以由用户指定。
迭代查询会是什么样子?粗略的方法可能是单独的选择语句,其间有 UNION ALL。
select a, sum(b) from testTable where FROM_UNIXTIME( timestamp ) between '2012-01-01 05:10:00' and '2012-01-02 05:10:00' group by a order by sum(b) desc LIMIT 10
UNION ALL
select a, sum(b) from testTable where FROM_UNIXTIME( timestamp ) between '2012-01-02 05:10:00' and '2012-01-03 05:10:00' group by a order by sum(b) desc LIMIT 10
UNION ALL
select a, sum(b) from testTable where FROM_UNIXTIME( timestamp ) between '2012-01-03 05:10:00' and '2012-01-04 05:10:00' group by a order by sum(b) desc LIMIT 10
..
..
..
UNION ALL
select a, sum(b) from testTable where FROM_UNIXTIME( timestamp ) between '2012-01-14 05:10:00' and '2012-01-15 05:10:00' group by a order by sum(b) desc LIMIT 10 ;</br>
但我希望它更通用,用户可以运行具有 2 个给定日期的脚本。
输出就像
一个 | FROM_UNIXTIME(时间戳)| 总和 (b)
------------+------------+------
测试 | 2012-01-01 03:24:41-04 | 500
测试 | 2012-01-01 03:19:40-04 | 420
测试| 2012-01-01 03:14:39-04 | 261
测试 | 2012-01-01 03:09:38-04 | 244
测试| 2012-01-01 03:04:37-04 | 231
测试| 2012-01-01 02:59:36-04 | 223
测试| 2012-01-01 02:54:35-04 | 211
测试1 | 2012-01-01 02:49:34-04 | 199
测试1 | 2012-01-01 03:24:41-04 | 195
测试1 | 2012-01-01 03:19:40-04 | 191
新 | 2012-01-02 06:11:06-04 | 1000
新| 2012-01-02 06:06:06-04 | 978
新| 2012-01-02 06:01:06-04 | 867
新 | 2012-01-02 05:56:05-04 | 786
新| 2012-01-02 05:51:05-04 | 698
新| 2012-01-02 05:46:05-04 | 第598
章 2012-01-02 06:11:06-04 | 第476
章 2012-01-02 05:41:04-04 | 第345
章 2012-01-02 06:06:06-04 | 250
新2
| 2012-01-02 06:01:06-04 | 125