我已经查看了一些关于此的 SO 答案,但是由于我什至与业余 DBA 并不接近,所以他们有点过头了。谈论 cte 和一些我以前从未见过的内置函数。我想知道是否有一个更简单的解决方案来解决我想要找到的问题。这是我的查询:
SELECT DISTINCT systudent.lastname,
systudent.firstname,
...
systatchange.effectivedate AS StatusChangeDate
FROM systudent
INNER JOIN systatchange
ON systudent.systudentid = systatchange.systudentid
INNER JOIN syschoolstatus
ON systudent.syschoolstatusid = syschoolstatus.syschoolstatusid
INNER JOIN amleadsrc
ON systudent.amleadsrcid = amleadsrc.amleadsrcid
INNER JOIN amleadtype
ON systudent.amleadtypeid = amleadtype.amleadtypeid
INNER JOIN sycountry
ON systudent.sycountryid = sycountry.sycountryid
INNER JOIN adprogram
ON systudent.adprogramid = adprogram.adprogramid
WHERE systatchange.effectivedate >= Dateadd(day, -7, Getdate())
AND systatchange.newsyschoolstatusid = 1 --Lead
AND syschoolstatus.descrip NOT IN (
'56-Future Graduate', '92-Application Denied' )
AND amleadtype.code <= 'HS2014'
ORDER BY leaddate DESC
我正在收集有关在过去两周内状态更改为“1”(SyStatChange.NewSySchoolStatusID) 的人员的信息。
我遇到的问题是,对于某些用户,状态更改审计表显示重复记录。它们都有正确的状态更改字段,但生效日期是毫秒到几分钟,所以我被骗了。因此,对于用户 1 2 和 3,我只想要每个用户的最新记录。
仅获取最近日期更改的记录上的 SyStatChange 信息的最简单方法是什么?