a = id
b = date
c = NewestDate
对于每一个,我都有b c
如何获取每套ID (MY'a'列)的最新日期?他们并非都有相同的结束日期。所以我确实需要最大值。
数据在myTable中, 到目前为止我试过了:
select *
into #myTable
from myTable
select
t.a
,t.b
,t.c
,(select max(b) from myTable) as c
from myTable t
left join #myTable t1
on t.a = t1.a and t.b = t1.b
order by a, b
上面代码的问题是在'c'中它被放置了所有的最大日期,这不是我真正想要的。
编辑:现在用Dmitry Poliakov给出的答案解决了这个问题(谢谢)。使用:
SELECT a,
b,
max(b) OVER (PARTITION BY a) AS c
FROM myTable
ORDER BY a,b
答案 0 :(得分:2)
您可以选择每组ID的最大日期为
WITH cte AS (
SELECT a,
b,
max(b) OVER (PARTITION BY a) AS c,
d
FROM myTable
)
SELECT t1.a,
t1.b,
t1.c,
t1.d,
t2.d AS e
FROM cte t1
JOIN cte t2 ON t1.a=t2.a AND t1.c=t2.b
编辑:第二个(已编辑)部分问题的可能解决方案之一是
{{1}}
答案 1 :(得分:1)
DECLARE @updates TABLE (a int,b date,c date)
INSERT INTO @updates VALUES
(1,GETDATE(),GETDATE()+10),
(2,GETDATE()+11,GETDATE()+13),
(2,GETDATE()+11,GETDATE()+14),
(3,GETDATE()+11,GETDATE()+13),
(1,GETDATE()+11,GETDATE()+13);
WITH
cte AS
(
SELECT a, max(c) latest
FROM @updates
GROUP BY a
)
SELECT *
FROM cte INNER JOIN @updates as d ON cte.a=d.a AND cte.latest = d.c
构建一个表以选择具有最新更新的记录,然后将此新表与原始表连接以提取匹配行中的所有字段