我有2个表,如下图所示: 如何解决我的GROUP BY子句
现在的问题是: 怎样才可以有一个视图,显示最后一个用户的详细信息?换句话说,我需要在tbl_Owners表中拥有MAX(StartDate)的人员的详细信息? 我想找到每间公寓的最新拥有者。 我尝试了不同的方法,但是我找不到这样做的方法。 我知道我需要在集团PERSONID By子句它通过的AppID组中的记录,但我不能这样做,
谢谢
我有2个表,如下图所示: 如何解决我的GROUP BY子句
现在的问题是: 怎样才可以有一个视图,显示最后一个用户的详细信息?换句话说,我需要在tbl_Owners表中拥有MAX(StartDate)的人员的详细信息? 我想找到每间公寓的最新拥有者。 我尝试了不同的方法,但是我找不到这样做的方法。 我知道我需要在集团PERSONID By子句它通过的AppID组中的记录,但我不能这样做,
谢谢
试试这个
select t1.* from tbl_persons as t1 inner join
(
select t1.* from tbl_owners as t1 inner join
(
select appid,max(startdate) as startdate from tbl_owners group by appid
) as t2
on t1.appid=t2.appid and t1.startdate=t2.startdate
) as t2
on t1.personid=t2.personid
谢谢。有用。 –
添加到您的查询:
JOIN (select AppId, MAX(StartDate) as MAxStartDate
from dbo.tbl_Owners
group by PersonId) o2
ON dbo.tbl_Owners.AppId= o2.AppId and
dbo.tbl_Owners.StartDate = o2.MAxStartDate
的上面的子查询返回每个AppId及其最新的StartDate。自我加入的结果会给你你想要的。
我需要找到每间公寓的最新拥有者。所以我想我应该通过appID –
进行分组当然,我会编辑! – jarlh
您可以使用CTE为此,
;WITH CTE AS
(
SELECT AppID,PersonID,StartDate,
ROW_NUMBER() OVER (PARTITION BY AppID ORDER BY StartDate DESC) RN
FROM TableNAme
GROUP BY AppID,PersonID,StartDate
)
SELECT * FROM CTE
WHERE RN=1
SELECT dbo.tbl_Owners.*,dbo.tbl_Persons.PersonFullname FROM dbo.tbl_Owners
INNER JOIN
dbo.tbl_Persons ON dbo.tbl_Owners.PersonID=dbo.tbl_Persons.PersonID
GROUP BY dbo.tbl_Owners.StartDate HAVING MAX(StartDate);
使用GROUP BY的起始日期,而不是上是PersonID。
HAVING但没有GROUP BY,仍然是upvote!?! – jarlh
使用交叉申请
select t.*, p.* -- change as needed
from dbo.tbl_Persons p
cross apply (
select top(1) *
from dbo.tbl_Owners o
where o.PersonId = p.PersonId
order by o.StartDate desc
) t
使用ROW_NUMBER
'选择MAX(起始日期)...................... 。GROUP BY Orners.PersonID' –
什么是您的Sql服务器版本?请正确标记。如果它支持'row_number()over()'函数然后使用它。 – Serg
@Serg它是2014版本 –