首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是如何总结每天订单状态的次数的?

我是如何总结每天订单状态的次数的?
EN

Stack Overflow用户
提问于 2017-10-12 12:26:40
回答 2查看 47关注 0票数 1

我有一张这样的桌子:

  • id_order_state
  • date_add

我想趋势一下我每天得到多少次id_order_state 417

我试过这样做,但这不是我想要的方式:

代码语言:javascript
复制
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

现在我得到了这样的结果:

代码语言:javascript
复制
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年我有5 id_order_state 4和3 id_order_state 17 -10-11。

结果:

代码语言:javascript
复制
2017-10-11    8

有人能帮我吗?

额外:将结果限制在最后30天(每次查询)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 12:31:58

函数的作用是将“时间戳”转换为“日期”:

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
date_add      nb
2017-10-11    11
2017-10-12    2
票数 2
EN

Stack Overflow用户

发布于 2017-10-12 13:41:04

我使用了一个公共表表达式(CTE)来组合按日、月和年对日期部分进行分组,然后将它们表示为一个连贯的日期(如dd/mm/yyyy)。您可以与Getdate()一起使用它,这样您就可以从今天之前保存数据的任何表中只选择今天的行。我把它放在最后,你可以删除/*和*/,如果你喜欢那样的话。如果您愿意的话,您可以用它创建一个存储过程,然后运行这个过程(EXEC sp_today),我已经把它放在了开头。

代码语言:javascript
复制
--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())*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46709585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档