SQL查询显示多行之间的差异

时间:2016-10-31 19:20:56

标签: sql sql-server sql-server-2008 select

我需要一些帮助,根据表中的唯一编号显示具有不同日期的所有行,下面是我创建的虚拟表,类似于我需要分析的表。

enter image description here

我需要展示的是预期日期已经改变但是VisitNumber相同的所有行,我突出显示了四行作为示例;

第一次进入是空的 第二次参赛是25/04/16
然后最后的条目是24/06/16

有时可能会有一个条目,其中访问号码与已更改的行相同但预期日期相同,在这种情况下,我需要忽略它们的行。

此外,可能有多个条目具有相同的唯一ID,但访问号码不同。

2 个答案:

答案 0 :(得分:1)

我认为你可以使用窗口函数来做到这一点:

select t.*
from (select t.*, 
             min(ExpectedDate) over (partition by UniqueId, VisitNumber) as mined,
             max(ExpectedDate) over (partition by UniqueId, VisitNumber) as maxed
      from t
     ) t
where mined <> maxed and ExpectedDate is not null;

答案 1 :(得分:1)

这应该做你想要的:

SELECT UniqueID, VisitNumber, Min(ExpectedDate), Max(ExpectedDate)
FROM Table
GROUP BY uniqueID, VisitNumber
HAVING Min(ExpectedDate) <> Max(ExpectedDate)