gpt4 book ai didi

带 CASE 的 mysql COUNT()

转载 作者:行者123 更新时间:2023-11-29 02:47:30 25 4
gpt4 key购买 nike

我遇到了这个查询返回数据的方式的问题。 timestamp 返回正确,newpost 返回正确,但已解决的帖子和已关闭的帖子没有返回正确。我遇到的问题,我今天有一个例子,今天有人关闭了一堆票,但因为它们比过去 7 天发现的票要旧(这样做是为了制图),所以不算在内,因为我m 使用 created 作为 order by group by。 Thing is created 是它的创建日期,用作图表的 timestamp 和 ticket 的创建时间以及 newpost

在 18 日结束时应该有 12 个 newposts,1 个 solved 和 22 个 closed 但它不起作用

SELECT
DATE(created) timestamp,
COUNT(created) newpost,
COUNT(CASE WHEN DATE(closed) AND (sent = 0 OR sent = 1) THEN closed END) solvedpost,
COUNT(CASE WHEN DATE(closed) AND (sent = 2) THEN closed END) closedpost
FROM
tickets
GROUP BY DATE(created)
ORDER BY DATE(created) DESC
LIMIT 7

示例数据:门票 ---

| post_id| sent |     created      |        closed  
| 546nby | 2 | 2016-09-23 19:58:46 | 2016-10-18 19:00:53 |
| 540r72 | 2 | 2016-09-22 19:33:07 | 2016-10-18 18:00:56 |
| 54jjc2 | 2 | 2016-09-26 07:41:45 | 2016-10-18 18:00:54 |
| 5720p8 | 2 | 2016-10-12 02:55:35 | 2016-10-18 18:00:52 |
| 57a5qo | 2 | 2016-10-13 13:09:54 | 2016-10-18 18:00:50 |
| 4zp83k | 2 | 2016-08-26 15:40:55 | 2016-10-18 14:00:47 |
| 4zpu3c | 2 | 2016-08-26 17:36:19 | 2016-10-18 14:00:45 |
| 545qvv | 2 | 2016-09-23 17:03:08 | 2016-10-18 13:01:17 |
| 5475fv | 2 | 2016-09-23 21:41:17 | 2016-10-18 13:01:15 |
| 549u2z | 2 | 2016-09-24 12:01:35 | 2016-10-18 13:01:13 |
| 54ct4l | 2 | 2016-09-25 00:07:39 | 2016-10-18 13:01:11 |
| 54gksl | 2 | 2016-09-25 19:07:58 | 2016-10-18 13:01:09 |
| 54ippx | 2 | 2016-09-26 03:15:33 | 2016-10-18 13:01:07 |
| 54mxvf | 2 | 2016-09-26 21:09:21 | 2016-10-18 13:01:05 |
| 54yhfh | 2 | 2016-09-28 20:35:32 | 2016-10-18 13:01:03 |
| 55gxw7 | 2 | 2016-10-02 04:58:23 | 2016-10-18 13:01:01 |
| 55l2sz | 2 | 2016-10-03 00:11:01 | 2016-10-18 13:00:59 |
| 55ozq6 | 2 | 2016-10-03 18:04:24 | 2016-10-18 13:00:57 |
| 55txmx | 2 | 2016-10-04 15:09:11 | 2016-10-18 13:00:55 |
| 55vi46 | 2 | 2016-10-04 20:06:39 | 2016-10-18 13:00:53 |
| 55yw80 | 2 | 2016-10-05 10:56:29 | 2016-10-18 13:00:51 |
| 561wzj | 2 | 2016-10-05 21:26:43 | 2016-10-18 13:00:49 |
| 56fzlm | 0 | 2016-10-08 07:25:22 | 2016-10-18 13:00:45 |
| 56sjln | 1 | 2016-10-10 15:34:01 | 2016-10-18 01:00:48 |
| 57luzw | 1 | 2016-10-15 12:34:50 | 2016-10-17 18:00:44 |
| 56tlp8 | 1 | 2016-10-10 18:44:46 | 2016-10-17 16:00:44 |
| 578e6y | 0 | 2016-10-13 03:56:29 | 2016-10-17 05:00:47 |
| 56931q | 1 | 2016-10-07 02:01:46 | 2016-10-17 04:00:44 |
| 55wjpf | 1 | 2016-10-04 23:38:30 | 2016-10-16 23:00:47 |
| 56tye6 | 1 | 2016-10-10 19:45:46 | 2016-10-16 23:00:45 |
| 56wvge | 1 | 2016-10-11 07:07:50 | 2016-10-16 23:00:43 |
| 57sfd6 | 2 | 2016-10-16 17:16:28 | 2016-10-16 18:00:36 |

@德拉普

Results
---
| timestamp | newpost | solvedpost | closedpost |
| 2016-10-19 | 4 | 0 | 0 |
| 2016-10-18 | 12 | 0 | 0 |
| 2016-10-17 | 8 | 0 | 0 |
| 2016-10-16 | 6 | 0 | 1 |
| 2016-10-15 | 8 | 1 | 0 |
| 2016-10-14 | 11 | 2 | 1 |
| 2016-10-13 | 12 | 3 | 1 |

中断查询的结果 Heres The results

最佳答案

好的,我想我明白你想要什么,我会澄清的。希望我的文章也能帮助您解释 future 的帖子。

对于您的数据,您有创建时间、关闭时间以及关闭状态的工单。

我需要根据相关事件的每一天检索摘要。因此,即使工单可能在 10 月 9 日创建并在 10 月 18 日关闭,我也需要关闭日期事件显示在 18 日的摘要记录中。

为此,您需要一个子查询来汇总所有已关闭的事件以及基于相关日期的主要事件。但是现在,如果您有一个没有创建工单但有些工单已关闭的日期怎么办……我知道,异常情况,我不会对此进行查询。

因此,调整后的查询为

SELECT
DATE(T1.created) DateActivity,
COUNT(T1.*) newpost,
MAX( COALESCE( ClosedActivity.ClosedEntries, 0 )) as ClosedEntries,
MAX( COALESCE( ClosedActivity.ClosedPost, 0 )) as ClosedPosts,
MAX( COALESCE( ClosedActivity.SolvedPost, 0 )) as SolvedPosts
FROM
tickets T1
LEFT JOIN
( select
DATE( closed ) DateClosed,
COUNT(*) as ClosedEntries,
SUM( case when sent = 2 then 1 else 0 end ) as ClosedPost,
SUM( case when sent = 0 OR sent = 1 then 1 else 0 end ) as SolvedPost
from
tickets
where
closed >= date_add( current_date(), interval -7 day )
GROUP BY
DATE(closed) ) ClosedActivity
ON
DATE( T1.Created ) = ClosedActivity.DateClosed
where
T1.created >= date_add( current_date(), interval -7 day )
GROUP BY
DATE(T1.created)
ORDER BY
DATE(T1.created) DESC
LIMIT 7

请注意,我应用日期数学从当前减去 7 天。这样它只抓取在过去 7 天内创建工单的事件。如果您的数据有多年的数据,它将遍历所有数据,然后仅返回最近的 7 天。我只从最近 7 天的事件开始。

由于关闭的工单永远不能早于创建时间,因此在 7 天内是合格的。

现在,对于内部查询中每个日期的单独行,我正在应用该结果的 MAX(),因为它永远不会根据创建的票证的外部条目数而改变。否则,引擎可能会对不属于聚合列的 group by 子句的列唠叨。

我想这就是您要找的。

关于带 CASE 的 mysql COUNT(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40131939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com