我怎么总结订单状态每天的次数?

时间:2017-10-12 12:26:41

标签: sql phpmyadmin

我有一张这样的表:

  • id_order_state
  • DATE_ADD

我希望每天得到多少次id_order_state 4 17

我试过这样但是它不按我想要的方式工作:

SELECT `id_order_state` , `date_add` , COUNT( `id_order_state` )
FROM `ps_order_history`
WHERE `id_order_state` IN(4,17)
AND `date_add` LIKE '2017%'
GROUP BY `date_add`
ORDER BY `date_add` ASC
LIMIT 0 , 30

现在我得到这样的结果:

4   2017-10-12 11:51:56     1
4   2017-10-12 10:42:32     1
4   2017-10-12 10:41:29     1
4   2017-10-11 17:06:52     1
4   2017-10-11 17:06:47     1
4   2017-10-11 17:06:44     1
4   2017-10-11 17:06:40     1
4   2017-10-11 17:06:31     1
17  2017-10-11 17:06:28     1
17  2017-10-11 17:06:27     1
4   2017-10-11 17:06:26     2
17  2017-10-11 17:06:24     2
17  2017-10-11 17:06:23     1
4   2017-10-11 17:06:21     2

但我希望它像:

例如:我在2017-10-11有5个id_order_state 4和3个id_order_state 17

结果:

2017-10-11    8

任何可以帮助我的人?​​

额外:将结果限制为过去30天(每次查询)

2 个答案:

答案 0 :(得分:2)

尝试使用date()函数将“timestamp”转换为“date”:

SELECT
    date(`date_add`) as date_add,
    COUNT(*)         as nb,
FROM
    `ps_order_history`
WHERE
    `id_order_state` IN(4,17)
AND YEAR(`date_add`) = '2017'
AND date(`date_add`) >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY
    date(`date_add`)
ORDER BY
    date(`date_add`) ASC

结果:

date_add      nb
2017-10-11    11
2017-10-12    2

答案 1 :(得分:0)

我使用了一个公用表表达式(CTE)来组合日期,月份和年份的日期部分,然后将它们显示为一个连贯的日期(如dd / mm / yyyy)。您可以将此与Getdate()一起使用,以便您可以从任何包含今天之前的数据的表中仅选择TODAY'S行。我已经把它放在最后,你可以删除/ *和* /如果你喜欢这样使用它。如果你愿意,你可以创建一个存储过程,然后运行程序(EXEC PROC sp_today),我已经把它放在开头。

--CREATE PROC sp_today
--AS

WITH CTE (a,b,c,d)
AS
(
SELECT 
COUNT(id_order_state),
CONVERT(VARCHAR,DATEPART(DD,date_add)),
CONVERT(VARCHAR,DATEPART(MM,date_add)),
CONVERT(VARCHAR,DATEPART(YYYY,date_add))
FROM ps_order_history
WHERE id_order_state = 4 OR id_order_state = 17
GROUP BY DATEPART(DD,date_add),DATEPART(MM,date_add),DATEPART(YYYY,date_add)
)
SELECT b+'/'+c+'/'+d AS [date],a AS [nmbr] FROM CTE

/* WHERE b = DATEPART(DD,GETDATE()) AND c = DATEPART(MM,GETDATE()) AND d =
   DATEPART(YYYY,GETDATE())*/