我有一张这样的桌子
博客
Id ColumnId DateCreated Type
1 1 2018-01-01 1
1 1 2018-01-02 2
1 1 2018-02-01 3
我需要基于Id
和ColumnId
的组合选择所有唯一的行。然后,它需要抓住我最新的日期和最大的Type。我似乎无法弄清楚。
我开始只是获得像这样的不同值:
SELECT Id, ColumnId
FROM Blog
GROUP BY Id, ColumnId
然后我想到,如果我可以自己加入,我可以抽出其余的,但是我没有运气怎么做到这一点
SELECT *
FROM ( SELECT Id, ColumnId
FROM Blog
GROUP BY Id, ColumnId) A
INNER JOIN Blog B ON A.Id = B.Id AND A.ColumnId = B.ColumnId
但这只是让我退回了所有3行。
在我的实际示例中,Id
列不是int
,而是uniqueidentifier
。为了简单起见,我在示例中将其设为int。
预期结果样本:
Id ColumnId DateCreated Type
1 1 2018-02-01 3
答案 0 :(得分:2)
使用row_number()
:
select b.*
from (select b.*,
row_number() over (partition by id, columnid order by date desc, type desc) as seqnum
from blog b
) b
where seqnum = 1;
这会抓住最新日期中最大的类型,这就是我的解释“它需要抓住我最新日期和最大类型”。
答案 1 :(得分:2)
您是否尝试过使用MAX
?
SELECT Id, ColumnId, MAX(DateCreated), MAX([Type])
FROM Blog
GROUP BY Id, ColumnId
答案 2 :(得分:1)
似乎需要最后一个
您可以在最大日期内使用内部联接
select * from blog
inner join (
select id, columnId, max(DateCreated) as max_date
from blog
group by id, columnId
) t on t.id = blog.id, t.columnId = blog.columnId and t.max_date = blog.DateCreated
答案 3 :(得分:0)
也许不是最佳解决方案,但是您可以尝试在查询中使用子选择。 像这样
1