with
--my input--
x(id1,med_id,dt,dt_tm,casemgr_id,casemgr_clntid,status) as (
select 123456,98410,date'2024-04-19',timestamp'2024-04-19 09:00:00',12345,67891,-2
union all
select 194567,98410,date'2024-04-19',timestamp'2024-04-19 11:00:00',12345,67891,-2
union all
select 789101,98410,date'2024-04-24',timestamp'2024-04-24 09:00:00',12345,67891,-2
union all
select 194587,98410,date'2024-04-25',timestamp'2024-04-25 09:00:00',12345,67891,-2
union all
select 234561,98410,date'2024-04-26',timestamp'2024-04-26 09:00:00',12345,67891,-2
union all
select 456789,91956,date'2024-04-19',timestamp'2024-04-19 08:00:00',99012,87567,-2
union all
select 998415,91956,date'2024-12-20',timestamp'2024-12-20 07:00:00',99012,87567,-2
);
在上面输入。这是我正在运行的下面的代码,但我的目标是,如果记录在同一天,就像前两个实例一样,较早的记录应该有效,因为它的时间戳较早,而另一个记录应该无效,因为它位于较晚的时间戳中。也就是说,上午 9 点的第一条记录应该是有效的,而第二条记录应该是无效的。但我当前的下面的代码不起作用,因为两条记录都显示为有效,这不是我想要的输出。不确定我在下面的代码中做错了什么。请帮忙。
-- my sql qry ...
SELECT
id1
, med_id
, dt
,dt_tm
, casemgr_id
, casemgr_clntid
, CASE WHEN (
dt -
, FIRST_VALUE(dt) OVER(PARTITION BY med_id, casemgr_clntid ORDER BY dt_tm)
) > 180
OR (
dt-
, FIRST_VALUE(dt) OVER(PARTITION BY med_id, casemgr_clntid ORDER BY dt_tm)
) = 0
THEN 'valid'
ELSE 'invalid'
END AS status
FROM x
ORDER BY med_id, casemgr_clntid, dt_tm
;
我也尝试用 dt_tm 进行减法,但是 dt_tm-first_value(dt_tm) 不起作用。
错误:无效操作
with
--my desired output--
x(id1,med_id,dt,dt_tm,casemgr_id,casemgr_clntid,status) as (
select 123456,98410,date'2024-04-19',timestamp'2024-04-19 09:00:00',12345,67891, 'valid'
union all
select 194567,98410,date'2024-04-19',timestamp'2024-04-19 11:00:00',12345,67891,'invalid'
union all
select 789101,98410,date'2024-04-24',timestamp'2024-04-24 09:00:00',12345,67891,'invalid'
union all
select 194587,98410,date'2024-04-25',timestamp'2024-04-25 09:00:00',12345,67891,'invalid'
union all
select 234561,98410,date'2024-04-26',timestamp'2024-04-26 09:00:00',12345,67891,'invalid'
union all
select 456789,91956,date'2024-04-19',timestamp'2024-04-19 08:00:00',99012,87567,'valid'
union all
select 998415,91956,date'2024-12-20',timestamp'2024-12-20 07:00:00',99012,87567,'valid'
);
您需要 LAG 并检查 NULL,它标记第一个值,该值是有效的,并且您还需要检查一天是否已经过去,您用 >0 进行检查
with
--my input--
x(id1,med_id,dt,dt_tm,casemgr_id,casemgr_clntid,status) as (
select 123456,98410,date'2024-04-19',timestamp'2024-04-19 09:00:00',12345,67891,-2
union all
select 194567,98410,date'2024-04-19',timestamp'2024-04-19 11:00:00',12345,67891,-2
union all
select 789101,98410,date'2024-04-24',timestamp'2024-04-24 09:00:00',12345,67891,-2
union all
select 194587,98410,date'2024-04-25',timestamp'2024-04-25 09:00:00',12345,67891,-2
union all
select 234561,98410,date'2024-04-26',timestamp'2024-04-26 09:00:00',12345,67891,-2
union all
select 456789,91956,date'2024-04-19',timestamp'2024-04-19 08:00:00',99012,87567,-2
union all
select 998415,91956,date'2024-12-20',timestamp'2024-12-20 07:00:00',99012,87567,-2
)
SELECT
id1
, med_id
, dt
,dt_tm
, casemgr_id
, casemgr_clntid
, CASE WHEN (
dt -
LAG(dt) OVER(PARTITION BY med_id, casemgr_clntid ORDER BY dt_tm)
) IS NULL
OR (
dt-
LAG(dt) OVER(PARTITION BY med_id, casemgr_clntid ORDER BY dt_tm)
)
> 0
THEN 'valid'
ELSE 'invalid'
END AS status
FROM x
ORDER BY med_id, casemgr_clntid, dt_tm
;
id1 | med_id | dt | dt_tm | casemgr_id | casemgr_clntid | 状态 |
---|---|---|---|---|---|---|
456789 | 91956 | 2024-04-19 | 2024-04-19 08:00:00 | 99012 | 87567 | 有效 |
998415 | 91956 | 2024-12-20 | 2024-12-20 07:00:00 | 99012 | 87567 | 有效 |
123456 | 98410 | 2024-04-19 | 2024-04-19 09:00:00 | 12345 | 67891 | 有效 |
194567 | 98410 | 2024-04-19 | 2024-04-19 11:00:00 | 12345 | 67891 | 无效 |
789101 | 98410 | 2024-04-24 | 2024-04-24 09:00:00 | 12345 | 67891 | 有效 |
194587 | 98410 | 2024-04-25 | 2024-04-25 09:00:00 | 12345 | 67891 | 有效 |
234561 | 98410 | 2024-04-26 | 2024-04-26 09:00:00 | 12345 | 67891 | 有效 |
SELECT 7
with
--my input--
x(id1,med_id,dt,dt_tm,casemgr_id,casemgr_clntid,status) as (
select 123456,98410,date'2024-04-19',timestamp'2024-04-19 09:00:00',12345,67891,-2
union all
select 194567,98410,date'2024-04-19',timestamp'2024-04-19 11:00:00',12345,67891,-2
union all
select 789101,98410,date'2024-04-24',timestamp'2024-04-24 09:00:00',12345,67891,-2
union all
select 194587,98410,date'2024-04-25',timestamp'2024-04-25 09:00:00',12345,67891,-2
union all
select 234561,98410,date'2024-04-26',timestamp'2024-04-26 09:00:00',12345,67891,-2
union all
select 456789,91956,date'2024-04-19',timestamp'2024-04-19 08:00:00',99012,87567,-2
union all
select 998415,91956,date'2024-12-20',timestamp'2024-12-20 07:00:00',99012,87567,-2
)
SELECT
id1
, med_id
, dt
,dt_tm
, casemgr_id
, casemgr_clntid
, CASE WHEN (
dt -
LAG(dt) OVER(PARTITION BY med_id, casemgr_clntid ORDER BY dt_tm)
) = 0
THEN 'invalid'
ELSE 'valid'
END AS status
FROM x
ORDER BY med_id, casemgr_clntid, dt_tm
;
id1 | med_id | dt | dt_tm | casemgr_id | casemgr_clntid | 状态 |
---|---|---|---|---|---|---|
456789 | 91956 | 2024-04-19 | 2024-04-19 08:00:00 | 99012 | 87567 | 有效 |
998415 | 91956 | 2024-12-20 | 2024-12-20 07:00:00 | 99012 | 87567 | 有效 |
123456 | 98410 | 2024-04-19 | 2024-04-19 09:00:00 | 12345 | 67891 | 有效 |
194567 | 98410 | 2024-04-19 | 2024-04-19 11:00:00 | 12345 | 67891 | 无效 |
789101 | 98410 | 2024-04-24 | 2024-04-24 09:00:00 | 12345 | 67891 | 有效 |
194587 | 98410 | 2024-04-25 | 2024-04-25 09:00:00 | 12345 | 67891 | 有效 |
234561 | 98410 | 2024-04-26 | 2024-04-26 09:00:00 | 12345 | 67891 | 有效 |
SELECT 7