с использованием Oracle в моем примере:
with tab as (
select 'member 1' as member, to_date('05/03/11', 'DD/MM/YY') as trandate, '11:03:22' as trantime from dual
union all
select 'member 1' as member, to_date('05/03/11', 'DD/MM/YY') as trandate, '13:03:22' as trantime from dual
union all
select 'member 1' as member, to_date('07/03/11', 'DD/MM/YY') as trandate, '13:03:22' as trantime from dual
union all
select 'member 1' as member, to_date('06/03/11', 'DD/MM/YY') as trandate, '13:03:22' as trantime from dual
union all
select 'member 1' as member, to_date('08/03/11', 'DD/MM/YY') as trandate, '13:03:22' as trantime from dual
union all
select 'member 1' as member, to_date('07/03/11', 'DD/MM/YY') as trandate, '12:03:22' as trantime from dual )
SELECT member,
trandate,
trantime,
CASE
WHEN (dense_rank()
over(PARTITION BY member ORDER BY trandate) < 4 AND dense_rank() over(PARTITION BY member,trandate ORDER BY trantime) = 1) THEN
dense_rank() over(PARTITION BY member ORDER BY trandate)
ELSE
NULL
END
FROM tab
вывод
MEMBER TRANDATE TRANTIME order
------------------------ ----------- ---------- -----
member 1 05/03/2011 11:03:22 1
member 1 05/03/2011 13:03:22
member 1 06/03/2011 13:03:22 2
member 1 07/03/2011 12:03:22 3
member 1 07/03/2011 13:03:22
member 1 08/03/2011 13:03:22
6 rows selected