mysql以列日期为单位返回小时的订单金额

时间:2014-01-04 12:32:34

标签: mysql select dynamic-sql

我有一个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       |
+------------------------------+-----------------------------+

这可能吗?

1 个答案:

答案 0 :(得分:0)

您似乎有一个包含ordinidatainsvalore列的表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/