首页 > 解决方案 > 从彼此不同的特定列获取结果

问题描述

SELECT MessageID 
FROM ReadHistory 
WHERE EmployeeNumber = '2230' AND Response <> 'Hang-up' 
GROUP BY MessageID

这是我第一个工作的脚本,我得到了这些结果:

消息ID
5
11
14
16
17

现在我们正在进行更改,我需要对结果进行排序并使用更多列,但是会触发脚本。这是我的脚本。

SELECT DISTINCT 
    MessageID, ID, TTCallLogId, TTHourID 
FROM dbo.tblTTP_Messages_ReadHistory 
WHERE EmployeeNumber = '2230' AND Response <> 'Hang-up'
GROUP BY MessageID, ID, TTCallLogId, TTHourID 
ORDER BY ID DESC

结果:

ID 消息ID TTCallLogId TT小时ID
241 14 空值 空值
240 14 空值 空值
239 16 空值 空值
238 16 空值 空值
237 16 空值 空值
236 16 空值 空值
235 16 空值 空值
234 16 空值 空值
233 16 空值 空值
232 16 空值 空值
231 16 空值 空值

等等

问题:

我想在第一个脚本中只获得 5 个第一个结果,但我考虑到其他字段,以及这个顺序,我该怎么做?

标签: sqlsql-servertsql

解决方案


看来您想要每个 MessageID 的最后一行(即 ID 最高的行)。如果是这样,请使用窗口函数,例如MAX OVER

select messageid, ttcalllogid, tthourid
from
(
  select
    messageid, ttcalllogid, tthourid, id, 
    max(id) over (partition by messageid) as last_id_for_message
  from readhistory 
  where employeenumber = 2230 and response <> 'Hang-up' 
) marked
where id = last_id_for_message;

推荐阅读