我有一个mysql数据库,用于在特定日期按小时返回订单数量。我使用这个SELECT语句。
select
hour(datains),sum(valore)
from
ordini
where (stato=10 or stato = 1 ) and DATE(datains) = DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 0 DAY)
group by hour(datains)
order by
id DESC
它返回:
+--------------+---------------+
| hour datains | valore |
| 12 | 34 |
| 11 | 56 |
| 10 | 134 |
+-------------------------------
现在我需要有一定天数的列,就像这样。
+--------------+---------------+--------------+--------------+
| hour datains | 01-01-2014 | 02-01-2014 | 03-01-2014 |
| 12 | 34 | 34 | 77 |
| 11 | 56 | 0 | 128 |
| 10 | 134 | 66 | 12 |
+------------------------------+-----------------------------+
这可能吗?
答案 0 :(得分:0)
您似乎有一个包含ordini
,datains
和valore
列的表stato
。
也许您可以尝试使用此查询来生成最近三天的销售量的小时累计,但不包括今天。
SELECT DATE_FORMAT(datains, '%Y-%m-%d %H:00') AS hour,
SUM(valore) AS valore
FROM ordini
WHERE (stato = 1 OR stato = 10)
AND datains >= CURRENT_DATE() - INTERVAL 3 DAY
AND datains < CURRENT_DATE
GROUP BY DATE_FORMAT(datains, '%Y-%m-%d %H:00')
ORDER BY DATE_FORMAT(datains, '%Y-%m-%d %H:00')
这将为您提供三天中每小时一行的结果集,例如:
2014-01-01 10:00 456
2014-01-01 11:00 123
2014-01-02 10:00 28
2014-01-02 11:00 350
2014-01-02 12:00 100
2014-01-02 13:00 17
2014-01-03 10:00 321
2014-01-03 11:00 432
2014-01-03 12:00 88
2014-01-03 13:00 12
这是您请求的数据摘要,但是逐行格式化。下一步是找出一个适当的技术来 pivot 该结果集,格式化它以使某些行成为列。
碰巧我刚刚写了一篇关于这个主题的帖子。是这里: http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/