SQL查询基于日期值查找系列冲突

时间:2014-09-19 18:20:30

标签: sql-server-2008

查找select语句,以根据PARENTGROUPID编号查找一组文档中的记录,其中来自该子组的日期值与该组不一致。如果有帮助,父组ID将始终是组中记录的最低值。

例如。我有以下记录

RecordNUM   ParentGroupID   Date
000001      000001          5/1/2014
000002      000001          5/1/2014
000003      000001          5/2/2014
000004      000004          11/2/2013
000005      000004          11/2/2013
000006      000006          1/23/2014
000007      000006          1/23/2014
000008      000006          1/23/2014
000009      000006          1/25/2014

我正在尝试捕获不一致的日期作为groupID 00001的示例,其中日期是5/2/2014,其中一个孩子但父母是5/1/2014。应该从支票中拿出的另一组也是groupID 00006,其中最后一个孩子的日期是2014年1月25日而不是2014年1月23日

2 个答案:

答案 0 :(得分:1)

这是一种使用min over获取父母日期的方法,然后将其与孩子的日期进行比较:

with cte as (
  select *, min(dt) over (partition by parentgroupid) mindt
  from yourtable
  )
select *
from cte 
where dt <> mindt

答案 1 :(得分:0)

如果您只想要ParentGroupIDDate并且不需要RecordNUM,则可以使用EXCEPT运营商:

select parentgroupid, date from your_table 
except
select parentgroupid, min(date) 
from your_table
group by parentgroupid

这将形成一组所有行,并从中减去包含每个ParentGroupID的min(日期)的集合。

如果您还需要RecordNUM列,则可以将上述查询用作联接中的子查询:

select * from your_table t1 
inner join (
  select parentgroupid, date from your_table 
  except
  select parentgroupid, min(date) 
  from your_table
  group by parentgroupid
) t2 on t1.ParentGroupID = t2.ParentGroupID and t1.Date = t2.Date

Sample SQL Fiddle