Sql 摆脱旧唱片

Sql 摆脱旧唱片,sql,sql-server-2008,Sql,Sql Server 2008,有一个结果集,其中所有记录都是这样的唯一列。 如果有另一条记录属于同一个BusinessID,我只想显示日期较新的记录。 我要得到这个结果的查询是 SELECT FirstName, LastName, Department, StartDate, Title, PhoneNumber, BusinessEntityID FROM (SELECT E.BusinessEntityID, H.FirstName, H.LastNam

有一个结果集,其中所有记录都是这样的唯一列。 如果有另一条记录属于同一个BusinessID,我只想显示日期较新的记录。 我要得到这个结果的查询是

SELECT 
  FirstName, 
  LastName,
  Department,
  StartDate,
  Title,
  PhoneNumber,
  BusinessEntityID
FROM
  (SELECT
     E.BusinessEntityID,
     H.FirstName,
     H.LastName,
     H.Title,
     H.Department,
     E.PhoneNumber,
     E.CountryRegionName,
     E.PostalCode,
     H.StartDate
   FROM 
     CS120Exam_EmployeeDepartmentHistory H
   JOIN 
     CS120Exam_Employee E
   ON 
     E.BusinessEntityID=H.BusinessEntityID ) x 
   ORDER BY BusinessEntityID
结果是

BusinessID  FirstName LastName Department StartDate
----------- --------- -------- ---------- ----------
1           aaa       mate     staff      2002-02-02 <----- DO NOT want this 
1           aaa       mate     admin      2004-03-05
2           john      mate     admin      2001-03-06
3           sun       kent     admin      2004-03-05
4           bbb       clark    staff      2006-02-02 <----- DO NOT want this 
4           bbb       clark    admin      2009-03-05
BusinessID FirstName LastName部门起始日期
----------- --------- -------- ---------- ----------

1 aaa mate staff 2002-02-02您可以使用GROUP BY和max(开始日期)


您可以使用GROUP BY和max(起始日期)


我正在考虑按其余列分组,并获得最大日期。在这种情况下,您将获得一条带有max date的记录

SELECT FirstName,LastName,Department,max(StartDate),Title,PhoneNumber,BusinessEntityID
FROM
(SELECT E.BusinessEntityID,H.FirstName,H.LastName,H.Title,H.Department,E.PhoneNumber,
E.CountryRegionName,E.PostalCode,H.StartDate
FROM CS120Exam_EmployeeDepartmentHistory H
JOIN CS120Exam_Employee E
ON E.BusinessEntityID=H.BusinessEntityID )x 
group by  FirstName,LastName,Department,Title,PhoneNumber,BusinessEntityID
ORDER BY BusinessEntityID

我正在考虑按其余列分组,并获得最大日期。在这种情况下,您将获得一条带有max date的记录

SELECT FirstName,LastName,Department,max(StartDate),Title,PhoneNumber,BusinessEntityID
FROM
(SELECT E.BusinessEntityID,H.FirstName,H.LastName,H.Title,H.Department,E.PhoneNumber,
E.CountryRegionName,E.PostalCode,H.StartDate
FROM CS120Exam_EmployeeDepartmentHistory H
JOIN CS120Exam_Employee E
ON E.BusinessEntityID=H.BusinessEntityID )x 
group by  FirstName,LastName,Department,Title,PhoneNumber,BusinessEntityID
ORDER BY BusinessEntityID

您需要一个子项来查找每个
BusinessEntityID
的最新日期。试试这个(当然是未经测试的):


您需要一个子项来查找每个
BusinessEntityID
的最新日期。试试这个(当然是未经测试的):

可能比使用子选择获取最大起始日期要快,因为只需要对表进行一次扫描


可能比使用子选择获取最大起始日期要快,因为只需要对表格进行一次扫描。

请花时间格式化答案中的代码。你已经在这里呆了很长时间了,知道怎么做了。这和我收到的结果是一样的。请花点时间在你的答案中格式化代码。你已经在这里呆了很长时间了,知道怎么做了。这和我收到的结果是一样的。。这就是原因。。你想让不同标题的记录显示不同吗?我看你的标题不同。。这就是原因。。您希望不同标题的记录显示不同吗?问题:
FirstName
LastName
Department
列在一个
BusinessEntityID
中是否会有所不同,还是它们总是相同的?问题:FirstName
LastName
,和
Department
列在一个
BusinessEntityID
中会有所不同,还是始终相同?注意:这假设每个BusinessEntityID的起始日期是唯一的。注意:这假设每个BusinessEntityID的起始日期是唯一的。
SELECT 
  FirstName, 
  LastName,
  Department,
  StartDate,
  Title,
  PhoneNumber,
  BusinessEntityID
FROM
  (SELECT
     E.BusinessEntityID,
     H.FirstName,
     H.LastName,
     H.Title,
     H.Department,
     E.PhoneNumber,
     E.CountryRegionName,
     E.PostalCode,
     H.StartDate
   FROM 
     CS120Exam_EmployeeDepartmentHistory H
   JOIN 
     CS120Exam_Employee E
   ON 
     E.BusinessEntityID=H.BusinessEntityID ) x 
   WHERE x.StartDate = 
     (SELECT 
        Max(cs.StartDate) 
      FROM
        CS120Exam_EmployeeDepartmentHistory cs
      WHERE
        cs.BusinessEntityID = x.BusinessEntityID)
   ORDER BY BusinessEntityID
SELECT 
  FirstName, 
  LastName,
  Department,
  StartDate,
  Title,
  PhoneNumber,
  BusinessEntityID
FROM
  (SELECT
     E.BusinessEntityID,
     H.FirstName,
     H.LastName,
     H.Title,
     H.Department,
     E.PhoneNumber,
     E.CountryRegionName,
     E.PostalCode,
     H.StartDate,
     row_number() over (partition by BusinessID order by StartDate desc) as rn
   FROM 
     CS120Exam_EmployeeDepartmentHistory H
   JOIN 
     CS120Exam_Employee E
   ON 
     E.BusinessEntityID=H.BusinessEntityID ) x 
WHERE rn = 1
ORDER BY BusinessEntityID