【问题标题】:How to GROUP and choose lowest value in SQL如何在 SQL 中分组和选择最小值
【发布时间】:2012-04-10 18:26:31
【问题描述】:

我的表格由以下字段组成:

 id  |   date_from  | date_to      |   price
 --------------------------------------------
 CK1     22-12-2012   29-12-2012       800
 CK1     22-12-2012   29-12-2012       1200
 CK2     22-12-2012   29-12-2012       1400
 CK2     22-12-2012   29-12-2012       1800
 CK2     22-12-2012   29-12-2012       2200

如何创建按 ID、DATE_FROM、DATE_TO 对结果进行分组并从价格中选择最低值的 SQL 选择。

所以结果是

 CK1     22-12-2012   29-12-2012       800
 CK2     22-12-2012   29-12-2012       1400

【问题讨论】:

    标签: sql tsql select group-by


    【解决方案1】:

    如果您的 dbms 支持 cte,那么您可以这样做;

    测试数据

    DECLARE @tbl TABLE
    (
        id VARCHAR(100),
        date_from VARCHAR(100),
        date_to VARCHAR(100),
        price INT
    )
    
    INSERT INTO @tbl
    VALUES
        ('CK1','22-12-2012','29-12-2012',800),
        ('CK1','22-12-2012','29-12-2012',1200),
        ('CK2','22-12-2012','29-12-2012',1400),
        ('CK2','22-12-2012','29-12-2012',1800),
        ('CK2','22-12-2012','29-12-2012',2200)
    

    查询

    ;WITH CTE
    AS
    (   
        SELECT
            RANK() OVER(PARTITION BY id ORDER BY price ASC) AS RowNbr,
            tbl.*
        FROM
            @tbl AS tbl
    )
    SELECT
        *
    FROM
        CTE
    WHERE
        CTE.RowNbr=1
    

    【讨论】:

    • 这个方案也适用于更复杂的情况。
    【解决方案2】:
    SELECT id, date_from, date_to, min(price)
    FROM my_table
    GROUP BY id, date_from, date_to
    

    【讨论】:

      【解决方案3】:

      像这样:

      SELECT id, date_from, date_to, MIN(price)
      FROM TableName
      GROUP BY id, date_from, date_to
      

      【讨论】:

        【解决方案4】:
        select id, date_from, date_to, min(price)
        from table
        group by id, date_from, date_to
        

        【讨论】:

        • 如果 id 的每一行都是唯一的数字并且不能像 OP 中的示例那样重复怎么办?我们如何在不分组的情况下显示 id?
        • 下面使用RANK()的方案也可以。
        猜你喜欢
        • 2015-11-15
        • 2015-10-15
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 2019-08-05
        • 2015-02-03
        • 1970-01-01
        • 2020-05-16
        相关资源
        最近更新 更多