SQL查询min和max group by flag

时间:2018-03-16 03:49:15

标签: sql sql-server

我有一张表格如下:

Table

如何制作SQL select语句,以便MIN AND MAX EVENT DATEFLAG (0,1)分组结果?

结果将是:

Result

2 个答案:

答案 0 :(得分:2)

使用窗口功能

进行条件聚合
SELECT card_no, descr_reader,
       max(CASE WHEN flag = 0 THEN event_date END) date_in,
       max(CASE WHEN flag = 1 THEN event_date END) date_out 
FROM
(
     SELECT *,
               COUNT(flag) OVER (PARTITION BY flag ORDER BY id) Seq
     FROM table t
)t
GROUP BY card_no, descr_reader, Seq

答案 1 :(得分:1)

如果Window功能不起作用的替代方法:

 SELECT 
       t1.card_no, t1.descr_reader,
       t1.event_date date_in,
       (select top 1 event_date from test t2
        where t2.card_no = t1.card_no and
              t2.reader_no = t1.reader_no and
              t2.descr_reader = t1.descr_reader and
              t2.event_date > t1.event_date and
              t2.flag = 1
        order by t2.event_date ) as date_out
FROM test t1 
WHERE t1.flag = 0