具有MAX和GUID的SQL GroupBy
我有这张桌子:具有MAX和GUID的SQL GroupBy,sql,sql-server-2008,group-by,Sql,Sql Server 2008,Group By,我有这张桌子: ID Version IdRoot 887063C3-E1E5-4E76-9EE6-A08300C1DE2E 1 887063C3-E1E5-4E76-9EE6-A08300C1DE2E ED482E87-D36C-4E50-A6E7-A08300C1DE3C 2 887063C3-E1E5-4E76-9EE6-A08300C1DE2E` 735604E4-25FD-45
ID Version IdRoot
887063C3-E1E5-4E76-9EE6-A08300C1DE2E 1 887063C3-E1E5-4E76-9EE6-A08300C1DE2E
ED482E87-D36C-4E50-A6E7-A08300C1DE3C 2 887063C3-E1E5-4E76-9EE6-A08300C1DE2E`
735604E4-25FD-4575-BD88-A08300C1DE41 1 735604E4-25FD-4575-BD88-A08300C1DE41
DA08E433-111D-4C25-9A23-A08300C1DE46 2 735604E4-25FD-4575-BD88-A08300C1DE41
3C0CEED7-0F3A-47C3-90E8-A08300C1DE4A 3 735604E4-25FD-4575-BD88-A08300C1DE41
如何获得只显示max版本的SQL
ID Version IdRoot
ED482E87-D36C-4E50-A6E7-A08300C1DE3C 2 887063C3-E1E5-4E76-9EE6-A08300C1DE2E
3C0CEED7-0F3A-47C3-90E8-A08300C1DE4A 3 735604E4-25FD-4575-BD88-A08300C1DE41
我已经运行了以下sql:
按idroot从表组中选择ID,MAX([version])作为maxversione,idroot
但是SQL管理返回错误:ID必须是聚合的或插入到group by中
如果在GROUPBY中插入ID,sql将不会返回正确的数据
我有SQL 2008
谢谢。像这样使用:
WITH CTE
AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY IdRoot
ORDER BY version DESC) AS RN
FROM table1
)
SELECT ID, version, IdRoot
FROM CTE
WHERE RN = 1;
select
r.*
from Table1 as r
where
exists (
select *
from Table1 as t
where t.IdRoot = r.IdRoot
having max([Version]) = r.[Version]
)
| ID | VERSION | IDROOT |
|--------------------------------------|---------|--------------------------------------|
| 3C0CEED7-0F3A-47C3-90E8-A08300C1DE4A | 3 | 735604E4-25FD-4575-BD88-A08300C1DE41 |
| ED482E87-D36C-4E50-A6E7-A08300C1DE3C | 2 | 887063C3-E1E5-4E76-9EE6-A08300C1DE2E |
使用如下所示的方法:
WITH CTE
AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY IdRoot
ORDER BY version DESC) AS RN
FROM table1
)
SELECT ID, version, IdRoot
FROM CTE
WHERE RN = 1;
select
r.*
from Table1 as r
where
exists (
select *
from Table1 as t
where t.IdRoot = r.IdRoot
having max([Version]) = r.[Version]
)
| ID | VERSION | IDROOT |
|--------------------------------------|---------|--------------------------------------|
| 3C0CEED7-0F3A-47C3-90E8-A08300C1DE4A | 3 | 735604E4-25FD-4575-BD88-A08300C1DE41 |
| ED482E87-D36C-4E50-A6E7-A08300C1DE3C | 2 | 887063C3-E1E5-4E76-9EE6-A08300C1DE2E |
可以使用中的窗口功能执行此操作,但还有其他解决方案:
select
t.*
from (select distinct IdRoot from Table1) as r
outer apply (
select top 1 t.*
from Table1 as t
where t.IdRoot = r.IdRoot
order by [Version] desc
) as t
或者像这样:
WITH CTE
AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY IdRoot
ORDER BY version DESC) AS RN
FROM table1
)
SELECT ID, version, IdRoot
FROM CTE
WHERE RN = 1;
select
r.*
from Table1 as r
where
exists (
select *
from Table1 as t
where t.IdRoot = r.IdRoot
having max([Version]) = r.[Version]
)
可以使用中的窗口功能来执行此操作,但还有其他解决方案:
select
t.*
from (select distinct IdRoot from Table1) as r
outer apply (
select top 1 t.*
from Table1 as t
where t.IdRoot = r.IdRoot
order by [Version] desc
) as t
或者像这样:
WITH CTE
AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY IdRoot
ORDER BY version DESC) AS RN
FROM table1
)
SELECT ID, version, IdRoot
FROM CTE
WHERE RN = 1;
select
r.*
from Table1 as r
where
exists (
select *
from Table1 as t
where t.IdRoot = r.IdRoot
having max([Version]) = r.[Version]
)
您可以像在上面的查询中那样单独选择ID
您可以像在上面的查询中那样单独选择ID