首页 > 解决方案 > 接收每个 id 的一条记录和最新日期的一条记录

问题描述

我有下表stamps的列:

我想要每个工人一行,最近一天的记录,并且在 Transferred 中也有值 1

我尝试了很多可能性,但没有一个能按我想要的方式工作。

SELECT DISTINCT OUT.WORKER,OUT.DATE,OUT.TRANSFERRED,OUT.BALANCE 
FROM ( 
   SELECT WORKER,DATE,TRANSFERRED,BALANCE 
   FROM STAMPS 
   ORDER BY DATE DESC
) AS OUT 
GROUP BY WORKER

标签: sqlsql-servergreatest-n-per-group

解决方案


你说你想要最近的一天(大概是给定工人的最新一天),所以你需要 max 函数。

select s.Worker, 
       s.Date, 
      s.Transferred, 
      s.Balance
from 
 (select worker, 
   max(date) as date
   from stamps
   where transferred = 1
   group by Worker) as max_dates,
join stamps s
on s.worked = max_dates.worker
and s.date = max_dates.date

推荐阅读