2017-05-28 73 views
-1

销售我想每小时销售数量在特定日期:获取每小时

table : invoices 
+-------+-----------+-----------+--------------------------+ 
| id | name | amout |  date    | 
+-------+-----------+-----------+--------------------------+ 
| 1 | John | 12313 | 2017-05-20 13:50:08 | 
| 2 | Mary | 5335 | 2017-05-17 22:21:35 | 
| 3 | Jeff |  23 | 2017-05-17 22:32:13 | 
| 4 | Bill |  132 | 2017-05-17 23:25:55 | 
| 5 | Bob  |  853 | 2017-05-17 24:52:37 | 
+-------+-----------+-----------+--------------------------+ 

所以,我想这样的输出:

9 a.m. to 10 a.m. we generated X invoices. 
10 a.m. to 11 a.m. we generated Y invoices. 
11 a.m. to 12 a.m. we generated Z invoices. 
  • X,Y Z是这些间隔中生成的发票数量。

我该怎么做?我使用MySQL。

谢谢!

+0

请阅读。 https://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056#271056不知道你的表是什么样的,它很难猜测回答你的问题题。 –

+0

对不起,我刚添加表 – Fabricio

+0

第一步就是试一下。表现出努力,如果某些东西不能工作,我们可以提供帮助。 – Utkanos

回答

0

三个SQL概念将帮助你得到这个问题的答案。

  1. “截断”日期戳;即从中提取小时。例如,2017-05-27 14:37.20被截断为2017-05-27 14:00:00
  2. 在特定日期从表中选择带有日期戳的表中的行。使用COUNT(*)GROUP BY

您可以像这样截断。

 SELECT DATE_FORMAT(`date`, '%y-%m-%d %H:00:00') hour_starting 
     FROM invoices 

您可以添加到该查询,选择这样的

 SELECT DATE_FORMAT(`date`, '%y-%m-%d %H:00:00') hour_starting 
     FROM invoices 
     WHERE `date` >= '2017-05-27` 
     AND `date` < '2017-05-27' + INTERVAL 1 DAY 

注意,这个选择上或之后(>=)上2017-05-27午夜日期值的所有行特定日期行。之前但不包括(<)第二天的午夜。

最后,您可以像这样使用COUNT。

 SELECT DATE_FORMAT(`date`, '%y-%m-%d %H:00:00') hour_starting, 
      COUNT(*) invoice_count 
     FROM invoices 
     WHERE `date` >= '2017-05-27` 
     AND `date` < '2017-05-27' + INTERVAL 1 DAY 
     GROUP BY DATE_FORMAT(`date`, '%y-%m-%d %H:00:00') 
+0

日期不是保留字 - 只是说' – Strawberry