【问题标题】:Grouping based on current timestamp in sql基于sql中当前时间戳的分组
【发布时间】:2021-07-25 12:13:03
【问题描述】:

好的,所以我有一个这样的 df:

MEETING_ID                       sSTART 
       322      2021-05-01 23:45:00.000
       322      2021-05-03 13:45:00.000
       312      2021-05-11 23:45:00.000
       312      2021-05-13 23:45:00.000

我想要的只是一张表格,它可以告诉我之前发生了多少次会议以及即将召开多少次会议......

为此,我使用了 CURRENT_TIMESTAMP 函数,不确定这是否错误,但这是我的查询不起作用...就本文而言,假设当前时间是 2021 年 5 月 2 日晚上 10:40

WITH s AS (
  SELECT MEETING_ID, 
CASE WHEN sSTART > CURRENT_TIMESTAMP THEN 1
ELSE 0
END PREVIOUS_MEETING,
CASE WHEN sSTART < CURRENT_TIMESTAMP THEN 1
ELSE 0
END UPCOMING_MEETING
FROM df
  ),
  ddd AS (SELECT
  MEETING_ID,
  COUNT(PREVIOUS_MEETING),
  COUNT(UPCOMING_MEETING)
  FROM s
  GROUP BY MEETING_ID
  )
  SELECT *
  FROM ddd

最后我想要这个:

MEETING_ID      PREVIOUS_MEETING    UPCOMING_MEETING
       322                     1                   1
       312                     2                   0

我不确定为什么会这样,但一些解释会有所帮助。

【问题讨论】:

  • 我认为您可能希望使用 SUM() 代替 COUNT(),因为您返回 1 表示匹配记录,返回 0 表示 PREVIOUS_MEETING 和 UPCOMING_MEETING 不匹配

标签: mysql sql group-by


【解决方案1】:

您只需要一个基本的透视查询:

SELECT
    MEETING_ID,
    SUM(sSTART > CURRENT_TIMESTAMP)  AS PREVIOUS_MEETING,
    SUM(sSTART <= CURRENT_TIMESTAMP) AS CURRENT_MEETING
FROM df
GROUP BY
    MEETING_ID;

请注意,我们正在对上面的布尔表达式求和,这在 MySQL 中是有效的语法。在其他数据库上,您可能需要进行条件计数,如下所示:

SELECT
    MEETING_ID,
    COUNT(CASE WHEN sSTART > CURRENT_TIMESTAMP THEN 1 END)  AS PREVIOUS_MEETING,
    COUNT(CASE WHEN sSTART <= CURRENT_TIMESTAMP THEN 1 END) AS CURRENT_MEETING
FROM df
GROUP BY
    MEETING_ID;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多