首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为每张票的最新状态清点行

为每张票的最新状态清点行
EN

Database Administration用户
提问于 2020-08-03 18:30:36
回答 2查看 50关注 0票数 2
代码语言:javascript
复制
 ticket_number |          datetime          | status
---------------+----------------------------+---------
             1 | 2020-08-03 03:52:58.048196 | replied
             1 | 2020-08-02 19:55:49.121455 | new
             2 | 2020-07-30 03:52:58.048196 | pending
             2 | 2020-07-28 20:15:41.213842 | replied
             2 | 2020-07-26 03:52:58.482911 | new
             3 | 2020-06-17 19:55:49.394628 | closed
             3 | 2020-06-14 03:52:58.513141 | replied
             3 | 2020-06-11 19:55:49.242859 | new
             4 | 2020-05-14 07:13:50.527481 | new
             5 | 2020-05-13 11:24:38.558921 | new

上表由datetime订购。在订购之后,我需要按ticket_number分组,以便每个票证只出现一次,并为每个票证的最新datetime选择status。然后,我需要计算每个status的行数。

票证1的状态为答复- replied_count = 1,

票据2的状态为挂起- pending_count = 1,

机票3的状态为关闭- closed_count = 1,

机票4的状态为新的- new_count = 1,

机票5的状态为mew - new_count =2。

预期结果:

代码语言:javascript
复制
replied_count  |  pending_count  |  closed_count  |  new_count
---------------+-----------------+----------------+------------
             1 |               1 |              1 |          2
EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-08-03 18:52:51

使用

代码语言:javascript
复制
WITH cte AS ( SELECT DISTINCT
                     ticket_number, 
                     FIRST_VALUE(status) OVER (PARTITION BY ticket_number 
                                               ORDER BY datetime DESC) last_status 
              FROM test )
SELECT last_status, COUNT(last_status) 
FROM cte
GROUP BY last_status

小提琴

以便获得所需的垂直形式的统计数据。如果严格需要枢轴输出,则使用交叉表()或类似的方法,或者使用4种情况进行仿真。

票数 1
EN

Database Administration用户

发布于 2020-08-03 22:14:10

这应该更快,但:

代码语言:javascript
复制
SELECT status, count(*)
FROM  (
   SELECT DISTINCT ON (ticket_number) status
   FROM   test
   ORDER  BY ticket_number, datetime DESC
   ) sub
GROUP  BY 1;

db<>fiddle 这里

假设datetime被定义为NOT NULL

请参见:

如果每张票有许多行,那么这些技术中的一种将会更快,但是:

每一张相关票证有一行的表ticket会有帮助。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/273137

复制
相关文章

相似问题

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