我有一个表get_today_events,该表显示了今天正在发生的事件。我需要为每个eventtime创建一个 View ,以显示哪些事件是实际事件(这意味着当前时间在实际事件和下一个事件之间,根据scheduleid列中的时间),而不考虑is_work列为N的事件。我遇到的问题是此子查询中的条件:

select scheduleid
     , max(eventtime) as eventtime
from get_today_events
where cast(current_timestamp as time) >= eventtime
  and is_work = 'Y'
group by scheduleid

current_timestamp00:00:0000:00:00之后的第一个事件之间之前,它可以正常工作-然后它什么也不显示。我找到了correct solution,但我希望找到一种更短的方法来实现相同的目的。

第一次编辑:

为了清楚起见,我正在发布一个示例,其中包含 STD scheduleid的预期数据。有五个时间间隔(以下是 TI TI ):
--------------------------------------------
scheduleid | eventname | eventtime | is_work
--------------------------------------------
   STD        Suspend    02:00:00       Y
   STD        Start      04:00:00       Y
   STD        Stop       05:00:00       Y
   STD        Suspend    19:00:00       Y
   STD        Start      02:00:00       Y
   STD        Stop       21:00:00       N
  • TI,介于 02:00:00 和04:00:00之间(实际eventnameSuspend);
  • TI在04:00:00到05:00:00之间(实际eventnameStart);
  • TI在05:00:00到19:00:00之间(实际eventnameStop);
  • TI,时间为19:00:00到21:00:00 02:00:00 (实际eventnameStart);
  • TI在21:00:00和02:00:00之间(实际eventnameStop)。
  • 最佳答案

    您要获取24小时周期内的最新事件。

    MAX(CASE WHEN CURRENT_TIME >= EVENTTIME THEN EVENTTIME END)
    

    给出CURRENT_TIMENULL之前的最新时间(如果没有)。

    然后,您可以使用COALESCE将午夜之前的最后一个事件替换为该NULL
    SELECT
        SCHEDULEID,
        COALESCE(MAX(CASE WHEN CURRENT_TIME >= EVENTTIME THEN EVENTTIME END),
                 MAX(EVENTTIME)) as EVENTTIME
    FROM GET_TODAY_EVENTS
    WHERE IS_WORK = 'Y'
    GROUP BY SCHEDULEID
    

    如果要获取这些事件的详细信息,可以使用原始表JOIN
    SELECT mr.SCHEDULEID,mr.EVENTTIME,gte.EVENTTYPEID
      FROM
      (SELECT
          SCHEDULEID,
          COALESCE(MAX(CASE WHEN CURRENT_TIME >= EVENTTIME THEN EVENTTIME END),
                   MAX(EVENTTIME)) as EVENTTIME
         FROM GET_TODAY_EVENTS
        WHERE IS_WORK = 'Y'
        GROUP BY SCHEDULEID) AS mr
     JOIN GET_TODAY_EVENTS gte
       ON (gte.SCHEDULEID=mr.SCHEDULEID AND gte.EVENTTIME=mr.EVENTTIME)
    

    SQLFiddle

    关于sql - 获取24小时周期内的最新事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23322278/

    10-11 04:04
    查看更多