【问题标题】:Group only specific values and get min and max dates仅对特定值进行分组并获取最小和最大日期
【发布时间】:2018-06-13 20:33:53
【问题描述】:

您好,提前谢谢您,不确定我的标题是否足够,但希望具有所需输出的图像会有所帮助。本质上,eventtype=2的数据需要按ID分组。分组后,我仍然需要连接 Min(eventdate) 和 max(eventdate)。

第一张图片只是简单的选择语句(从 TABLE 中选择 *)。

任何帮助将不胜感激。

SELECT __DisplayName,
       EventDate,
       RIGHT(CONVERT(varchar(20),DATEADD(HOUR, -5 , EventDate), 100),7)
        + ' to ' + 
       RIGHT(CONVERT(varchar(20), DATEADD(HOUR, -5 , EndDate), 100),7),
       location,
       __EventType
  FROM (SELECT *, 
               ROW_NUMBER() OVER 
                 ( PARTITION BY Id 
                       ORDER BY eventdate asc
                 ) AS ROWNUM
          FROM TABLE
       ) x 
 WHERE ROWNUM = 1 
   AND __ApprovalStatus = 'Approved' 
   AND __EventType not in ('1','-1');

【问题讨论】:

  • 为什么 ID 10 不在 11 月 7 日 - 11 月 8 日分组?你不能只用minmax吗?
  • 您介意指定 RDBMS 吗?对我来说,它看起来像 SQL Server,但不能绝对确定。
  • 如果你的第一张截图只是select * from yourtable,你能不直接用select id, eventtitle, eventtime, location, eventtype, min(eventdate), max(eventdate) from yourtable group by id, eventtitle, eventtime, location, eventtype吗?如果您需要...
  • 好点。既然您说我如何按 ID 和 event type = -2 分组?这是我需要“截断”为一行的唯一事件类型。
  • 嗨大卫,你是对的,这是 sql server。

标签: sql max min


【解决方案1】:

感谢大家的意见。你让我找到了正确的答案。所以我所做的基本上是联合两个查询。一个获取 eventtype 不在 -1,1 和 -2 中的所有数据,然后是另一个查询,该查询基本上连接了 min 和 max,但仅在 event type = -2 的情况下

(Select  __DisplayName, cast(min(EventDate)as varchar) Eventdate from TABLE WHERE __ApprovalStatus = 'Approved' and __EventType not in ('1','-1','-2')
group by ID, __DisplayName
Union ALL
Select  __DisplayName, 
cast(min(EventDate)as varchar) + ' - ' +  cast(max(EventDate) as varchar) Eventdate     from TABLE WHERE    __ApprovalStatus = 'Approved' and __EventType = -2     group by ID, __DisplayName)
order by Eventdate

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2021-12-15
    • 2022-10-13
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多