使用其他列的最小日期检查列的值

cut 发布于 2019-11-08 join 最后更新 2019-11-08 22:59 9 浏览

我有一张桌子

  id     | guid | Status 
  ------ | -----| ----------
  1      | 123  | 2
  2      | 456  | 2 
  3      | 789  | 2
另一个表为
 id.    | modified date           | Status 
 ------ | ----------------------- | ----------
 1      | 26-08-2017 04:05        | 0
 1      | 26-08-2017 10:50        | 0
 1      | 01-09-2017 02:03        | 0
 1      | 02-09-2017 13:43        | 2
 2      | 26-08-2017  03:04       | 0
 2      | 26-08-2017  11:04       | 2
 2      | 02-09-2017  18:03       | 2
 3      | 01-09-2017  03:45       | 0
 3      | 01-09-2017  12:04       | 0
 3      | 03-09-2017  17:08       | 2
在第一个表中,只要状态值发生变化,它就会记录在另一个表中。 我想要那些第一次保存时状态值为0的id(即该事务的最短日期)。 Id 1在26日第一次得到保存,然后整天保持0(我只能检查第一次约会)。对于26的id 2,它被保存为0,然后在同一天改为2.所以它不会进来这种情况。对于id 3,它在第一次约会时仍然是0。 要求o / p将 ID 1 3
已邀请:

gipsam

赞同来自:

试试这个查询:

select id from (
    select id,
       CAST(modified_date as date) as [modified_date],
       [status],
       MIN(CAST(modified_date as date)) over (partition by id) as [first_saved]
    from TABLE_NAME
) as A where modified_date = first_saved
group by id
having SUM([status]) = 0

lsunt

赞同来自:

您可以使用如下查询

select t1.id 
from table2 t1 
inner join
(
select id, 
min(modifieddate) over (partition by id) startDateTime,
max(Status) over (partition by id,cast(modifieddate as date)) maxStatusOnStartDay
from table2
)t2
on t1.id=t2.id and 
cast(t1.modifieddate as date)=cast(t2.startDateTime as date)
and t2.maxStatusOnStartDay=0
group by t1.id
see live demo