Sql 仅对特定值分组,并获取最小和最大日期

Sql 仅对特定值分组,并获取最小和最大日期,sql,max,min,Sql,Max,Min,您好,提前谢谢您,我不确定我的标题是否足够,但希望具有所需输出的图像将有所帮助。本质上,eventtype=2的数据需要按ID分组。分组后,我仍然需要连接Mineventdate和maxeventdate 第一个图像只是简单的select STATINTSELECT*from表 任何帮助都将不胜感激 SELECT __DisplayName, EventDate, RIGHT(CONVERT(varchar(20),DATEADD(HOUR, -5 , EventDa

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

第一个图像只是简单的select STATINTSELECT*from表

任何帮助都将不胜感激

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');

谢谢大家的意见。你让我找到了正确的答案。所以我所做的基本上是合并两个查询。获取eventtype不在-1、1和-2中的所有数据的查询,然后是另一个基本上连接最小值和最大值但仅在eventtype=-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

为什么不在11月7日至8日期间确定10组?您能不能不使用最小值和最大值?您介意指定RDBMS吗?对我来说,它看起来像SQL Server,但不能绝对确定。如果您的第一个屏幕截图只是从表中选择*,那么您是否可以使用select id、eventtitle、eventtime、location、eventtype、MineEventDate、maxeventdate从表组中按id、eventtitle、eventtime、location、eventtype进行选择?如果你需要的话,很容易在一列中计算出最小值和最大值……非常好。既然你说了,当事件类型=-2时,我如何按ID分组?这是唯一需要截断为一行的事件类型。您好,David,您的回答正确,这是sql server。