我的桌子上有APPLICATIONSTATUSLOG_ID主键字段。
为了找出我的数据库中的最后更新记录,MAX(APPLICATIONSTATUSLOG_ID)被认为是最近的记录。
我试过这段代码:
SELECT
MAX(CASE WHEN MAX(d.ApplicationStatusLog_ID) = d.ApplicationStatusLog_ID THEN d.ApplicationStatusID END) AS StatusID,
FROM
ApplicationStatusLog d
但我得到错误:
消息130,级别15,状态1,行53无法对包含聚合或子查询的表达式执行聚合函数。
我的桌子看起来像是
ApplicationID - ApplicationStatusID - ApplicationStatusLogID
10000 17 100
10000 08 101
10000 10 102
10001 06 103
10001 10 104
10002 06 105
10002 07 106
我的输出应该是:
10000 10
10001 10
10002 07
请帮助我理解并解决我的问题。
答案 0 :(得分:1)
如果您想查找上次更新的行,只要它在APPLICATIONSTATUSLOG_ID列中具有最大值。查询将是:
SELECT *
FROM ApplicationStatusLog
WHERE ApplicationStatusLog_ID = (SELECT MAX(ApplicationStatusLog_ID) FROM ApplicationStatusLog )
修改强>
正如您在评论中所述,对它的查询将是:
DECLARE @statusId INT
SELECT @statusId = STATUSID
FROM ApplicationStatusLog
WHERE ApplicationStatusLog_ID = (SELECT MAX(ApplicationStatusLog_ID) FROM ApplicationStatusLog )
编辑2:
根据您的编辑查询将是:
WITH C AS
(
SELECT ApplicationID,ApplicationStatusID,ApplicationStatusLogID, ROW_NUMBER() OVER (PARTITION BY ApplicationID ORDER BY ApplicationStatusLogID DESC) AS ranking
FROM ApplicationStatusLog
)
SELECT ApplicationID,ApplicationStatusID
FROM C
WHERE ranking = 1
答案 1 :(得分:0)
你可以像这样两次加入同桌:
select IT.JoiningID, JT.MAXAPPLICATIONSTATUSID FROM dbo.[Table] IT
INNER JOIN (
Select JoiningID, MAX (APPLICATIONSTATUSID) MAXAPPLICATIONSTATUSID
FROM dbo.[Table]
GROUP BY JoiningID
) JT ON IT.JoiningID = JT.JoiningID
现在每个ID都有MAXAPPLICATIONSTATUSID,因此你可以根据MAXAPPLICATIONSTATUSID写出你的魔杖。
答案 2 :(得分:0)
没有完整查询
SELECT
x.StatusId
...
FROM <Table> a
CROSS APPLY
(
SELECT x.APPLICATIONSTATUSID as StatusId
FROM <Table> x
HAVING MAX(APPLICATIONSTATUSLOG_ID) = a.APPLICATIONSTATUSLOG_ID
GROUP BY x.APPLICATIONSTATUSID
)