【问题标题】:Getting value of one column ( price ) for max of another column (date) for a set of columns (make.model)获取一组列(make.model)的另一列(日期)的最大值的一列(价格)的值
【发布时间】:2017-05-12 17:44:09
【问题描述】:

我在 MS SQL 中有一个数据库表

Date      Make    Model    Price
4-Apr-17  Toyota  Avalon   34000
5-Apr-17  Merc    ML350    45000
6-Apr-17  BMW     5X       55000
7-Apr-17  Totoya  Camry    28000
8-Apr-17  Merc    ML350    46000
9-Apr-17  BMW     5X       54000
10-Apr-17 Totoya  Camry    25000
11-Apr-17 Merc    ML350    47000
12-Apr-17 Toyota  Avalon   36000
13-Apr-17 BMW     5X       53000
14-Apr-17 Toyota  Avalon   35500
15-Apr-17 BMW     5X       53500
16-Apr-17 Toyota  Avalon   35500
17-Apr-17 Merc    ML350    46500

我想获得每种型号的最新价格。因此我的输出应该是

Date      Make    Model    Price
10-Apr-17 Totoya  Camry    25000
15-Apr-17 BMW     5X       53500
16-Apr-17 Toyota  Avalon   35500
17-Apr-17 Merc    ML350    46500

【问题讨论】:

    标签: sql-server join max row-number


    【解决方案1】:

    你应该使用ROW_NUMBER:

    WITH CTE AS
    (
        SELECT *,
               RN = ROW_NUMBER() OVER(PARTITION BY Make, Model
                                      ORDER BY [Date] DESC)
        FROM dbo.YourTable
    )
    SELECT *
    FROM CTE
    WHERE RN = 1;
    

    【讨论】:

      【解决方案2】:

      一种方法是使用窗口函数row_numbertop 1 with ties

      select top 1 with ties *
      from your_table
      order by row_number() over (
              partition by make, model 
              order by [date] desc
              );
      

      这样可以避免子查询/CTE。

      【讨论】:

        猜你喜欢
        • 2020-05-20
        • 2018-08-25
        • 2021-07-13
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 2016-05-06
        • 2012-04-08
        相关资源
        最近更新 更多