如何总结订单状态每天的次数?
问题描述:
我有这样一个表:如何总结订单状态每天的次数?
- id_order_state
- DATE_ADD
我想走势多少次,每天我得到id_order_state
和。
我想这样的,但它不工作的方式我想:
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
但我希望它是这样的:
例如:我有5个id_order_state 4和3 id_order_state 17于2017-10-11
结果:
2017-10-11 8
任何人都可以帮助我吗?
附加:结果限制为最近30天(每查询)
答
尝试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
答
我已经使用了公用表表达式(CTE)来将日期部分按日,月和年分组,然后将它们呈现为连贯日期(如dd/mm/yyyy)。您可以与Getdate()一起使用,以便您可以从任何保存今天之前的数据的表中选择仅今天的行。我已经把它放在最后,你可以删除/ *和* /如果你喜欢这样使用它。如果你喜欢的话,你可以创建一个存储过程,并运行该过程(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())*/
您的示例数据为几天,但预期的结果只包括一天。怎么来的? – jarlh