Sql 选择每个组的上次更改值
我正在尝试选择每个组的最后更改值 我有一张桌子 MMID列是增量的 在这里,我想要8月18日最后24小时内的最后一次更改“值”。 从下面的查询中,我可以得到。但即使bundle的值发生了变化,我也会得到那一行。 但我只希望在“Value”更改或“Value和Bundle”更改时使用行。但不仅仅是当Bundle被改变时Sql 选择每个组的上次更改值,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我正在尝试选择每个组的最后更改值 我有一张桌子 MMID列是增量的 在这里,我想要8月18日最后24小时内的最后一次更改“值”。 从下面的查询中,我可以得到。但即使bundle的值发生了变化,我也会得到那一行。 但我只希望在“Value”更改或“Value和Bundle”更改时使用行。但不仅仅是当Bundle被改变时 Desired output MMID GID MID Value Bundle DateEntered 4 1 1 0 2
Desired output
MMID GID MID Value Bundle DateEntered
4 1 1 0 2 18/8/15 05:05:08
6 2 2 2 2 18/8/15 06:06:06
我尝试的查询是:
select yt1.*
from Table1 yt1
left outer join Table1 yt2
on (yt1.GID = yt2.GID and yt1.MID = yt2.MID
and yt1.MMID < yt2.MMID)
where yt2.MMID is null and yt2.GID is null and yt2.MID is null and yt1.DateEntered > '2015-08-18 00:00:00' ;
我不应该排在最后一排
有人能告诉我我应该在这里做些什么吗。并没有真正按照您的尝试逻辑进行,但以下是我将如何获得所需结果:
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY GID, MID ORDER BY MMID) AS rn
FROM Table
)
, cte2 AS (
SELECT t1.* FROM cte t1
INNER JOIN cte t2
ON t1.GID=t2.GID
AND t1.MID=t2.MID
AND t1.value<>t2.value
AND t1.rn=t2.rn+1
)
SELECT *
FROM cte2
WHERE MMID=(
SELECT TOP 1 MMID
FROM cte2 c2
WHERE cte2.GID=c2.GID
AND cte2.MID=c2.MID
ORDER BY MMID DESC
)
注意:如果您不想在最终结果中包含rn列,请使用列列表而不是选择*为什么您的查询引用表1和表2?有不止一张桌子吗?看起来你的查询根本不应该起作用。有yt1.MMID
MMID GID MID Value Bundle DateEntered
4 1 1 0 2 18/8/15 05:05:08
6 2 2 2 2 18/8/15 06:06:06
8 2 4 3 2 18/8/15 06:06:07
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY GID, MID ORDER BY MMID) AS rn
FROM Table
)
, cte2 AS (
SELECT t1.* FROM cte t1
INNER JOIN cte t2
ON t1.GID=t2.GID
AND t1.MID=t2.MID
AND t1.value<>t2.value
AND t1.rn=t2.rn+1
)
SELECT *
FROM cte2
WHERE MMID=(
SELECT TOP 1 MMID
FROM cte2 c2
WHERE cte2.GID=c2.GID
AND cte2.MID=c2.MID
ORDER BY MMID DESC
)