Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有MAX和GUID的SQL GroupBy_Sql_Sql Server 2008_Group By - Fatal编程技术网

具有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