查找特定用户ID的最后一个条目

sti*_*cks 0 sql t-sql sql-server sql-server-2005

我正在尝试为每个位置找到特定用户的最后一个条目.我还需要忽略余额为零的任何行.

样品表:

    ID location user balance
    -- -------- ---- -------
     1 GLA      A    10.21
     2 GLA      A    0.00
     3 GLA      B    45.68
     4 GLA      B    12.56
     5 EDI      C    1.23
     6 EDI      D    5.48
     7 EDI      D    0.00
     8 LON      E    78.59
     9 MAN      F    0.00
    10 MAN      F    12.98
    11 MAN      G    56.45
    12 MAN      G    89.25
    13 MAN      H    0.00
    14 BIR      I    0.00
    15 BIR      I    32.87
Run Code Online (Sandbox Code Playgroud)

结果要求:

    ID location user balance
    -- -------- ---- -------
     4 GLA      B    12.56
     5 EDI      C    1.23
     8 LON      E    78.59
    10 MAN      F    12.98
    12 MAN      G    89.25
    15 BIR      I    32.87
Run Code Online (Sandbox Code Playgroud)

我被留给了一位生病的同事,而且不幸的是我的SQL知识相对有限.

我一直在研究使用MAX和PARTITION BY但到目前为止没有运气.这适用于SQL Server 2005数据库.

对此的任何帮助将不胜感激.我将添加任何进展.

非常感谢.

Ami*_*ngh 5

Select   
      A.ID ,
      A.location,
      A.[user] ,
      A.balance from TABLE1 A 
     inner join (
                 Select Max(Id) AS Id from TABLE1 
                 group by location,[user]
                 ) B 
      on A.ID=B.ID 
      WHERE A.Balance>0
Run Code Online (Sandbox Code Playgroud)

Sql小提琴演示

  • 对于SQL Server,User是一个关键字,因此请使用以下命令引用该标识符:[user] (2认同)

Tar*_*ryn 5

您应该可以row_number()用来获得结果:

select id, location, [user], balance
from 
(
  select id, location, [user], balance,
    row_number() over(partition by location, [user]
                        order by id desc) seq
  from yourtable
) d
where seq = 1
  and balance <> 0
order by id;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo