Sql 摆脱旧唱片
有一个结果集,其中所有记录都是这样的唯一列。 如果有另一条记录属于同一个BusinessID,我只想显示日期较新的记录。 我要得到这个结果的查询是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
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