【问题标题】:Get latest rows by date from aggregate从聚合中按日期获取最新行
【发布时间】:2016-06-07 21:20:05
【问题描述】:

嘿,我有点被这个查询卡住了。使用 SQL 服务器

我在表中有 UNIQUE(date, medId, userId)

我有这张桌子

date       | medId | userId | Quantity
2016-06-10 |   2   |   1    |   28
2016-06-07 |   1   |   1    |   19
2016-06-06 |   1   |   1    |   10

我想获取具有最大日期的行,每组 medId,userId,在这种情况下 我会得到

2016-06-10 |   2   |   1    |   28
2016-06-07 |   1   |   1    |   19

提前致谢!

我试过了

SELECT 
  a.userMedStockDate,
  a.userMedStockMedId, 
  a.userMedStockUserId,
  a.userMedStockQuantity
FROM (SELECT  
        MAX(userMedStockDate) AS userMedStockDate,
        userMedStockQuantity,
        userMedStockUserId,
        userMedStockMedId,
        ROW_NUMBER() OVER (partition by userMedStockMedId,userMedStockUserId 
                           ORDER BY MAX(userMedStockDate) desc) AS rnk
      FROM UserMedStock
      GROUP BY
        userMedStockUserId, 
        userMedStockQuantity,
        userMedStockMedId) a
WHERE a.rnk = 1

[已解决]

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    这应该可以工作

     select * from 
    (
    select 
    [date] , medId, userId ,Quantity
    ,row_number() over (partition by medId, userId order by [date] desc) as rowid 
    from yourtable
    ) as x
    where rowid = 1
    

    【讨论】:

      【解决方案2】:

      也可以试试这个:

      select y.* from 
      table1 y inner join 
      (
      SELECT [Date] = MAX([Date]), medId, userId
        FROM table1
        GROUP BY medId, userId
      ) x on y.[Date] = x.[Date] and y.medId = x.medId and y.userId = x.userId
      

      【讨论】:

        【解决方案3】:

        我将字段更改为我的实际表格,但在这里

        SELECT 
        a.userMedStockDate, a.userMedStockMedId, a.userMedStockUserId,      a.userMedStockQuantity
        FROM(
        SELECT  
        MAX(userMedStockDate) AS userMedStockDate,
        userMedStockQuantity,
        userMedStockUserId,
        userMedStockMedId,
        ROW_NUMBER()OVER(partition by userMedStockMedId, userMedStockUserId ORDER BY MAX(userMedStockDate) desc) AS rnk
        FROM UserMedStock
        GROUP BY userMedStockUserId, userMedStockQuantity, userMedStockMedId
        ) a
        WHERE a.rnk = 1
        

        【讨论】:

          猜你喜欢
          • 2016-02-10
          • 2011-07-31
          • 1970-01-01
          • 1970-01-01
          • 2020-05-09
          • 1970-01-01
          • 1970-01-01
          • 2019-04-28
          • 2011-09-14
          相关资源
          最近更新 更多