SQL分组取每组中第一行

根据两个条件分组,取每组中第一行数,用FIRST和GROUP BY写的,不知道是不是microsoft sql server management studio不识别FIRST,还是我哪里写错了,FIRST那一直报错,应该怎么办?

SELECT ShozokuCD, YakushokuCD,FIRST(ShainCD)AS ShainCD 
FROM  dbo.V_SEKININSHA GROUP BY ShozokuCD, YakushokuCD

转用 ROW_NUMBER 试试看,先根据分组生成编号,然后再获取编号为1的

SELECT ShozokuCD, YakushokuCD, ShainCD
FROM (
SELECT ShozokuCD, YakushokuCD, ShainCD,
ROW_NUMBER() OVER (PARTITION BY ShozokuCD, YakushokuCD ORDER BY ShainCD) AS rownumber
FROM dbo.V_SEKININSHA
) results
WHERE rownumber = 1;

SQL Server中,FIRST()函数在GROUP BY查询中不被支持

试试

SELECT TOP 1 ShozokuCD, YakushokuCD, ShainCD 
FROM  dbo.V_SEKININSHA 
GROUP BY ShozokuCD, YakushokuCD

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    解决方案:

    你可以使用ROW_NUMBER()函数结合OVER()子句来实现在Microsoft SQL Server Management Studio中分组取每组中第一行数据的功能。具体步骤如下:

    1. 首先,在SELECT语句中添加ROW_NUMBER()函数和OVER()子句。ROW_NUMBER()函数可以用于为每行数据分配一个唯一的序号,而OVER()子句则可以指定数据的排序方式和分组方式。示例如下:
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY column3) as row_num,
        column1,
        column2,
        column3,
        ...
    FROM table_name
    

    在这个示例中,我们使用了PARTITION BY关键字指定了两个分组条件,使用了ORDER BY关键字指定了按照哪个字段进行排序。ROW_NUMBER()函数会为每个分组中的数据赋一个唯一的序号,所有数据按照指定的排序方式进行排序。

    1. 然后,在上面的SELECT语句外嵌套一层SELECT语句,筛选出每个分组中的第一行数据。示例如下:
    SELECT 
        column1,
        column2,
        column3,
        ...
    FROM (
        SELECT 
            ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY column3) as row_num,
            column1,
            column2,
            column3,
            ...
        FROM table_name
    ) as t
    WHERE t.row_num = 1
    

    在这个示例中,我们嵌套了一层SELECT语句,将第一层SELECT语句的结果作为子查询。然后在子查询中,使用ROW_NUMBER()函数为每个分组中的数据赋予唯一的序号,最后在外层SELECT语句中筛选出序号为1的数据,即每个分组中的第一行数据。

    以上就是在Microsoft SQL Server Management Studio中分组取每组中第一行数据的解决方案。希望能够帮到你。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^