2017-05-28 53 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