sql - 从彼此不同的特定列获取结果
问题描述
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 个第一个结果,但我考虑到其他字段,以及这个顺序,我该怎么做?
解决方案
看来您想要每个 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;
推荐阅读
- jquery - 在haml中添加内联jquery时出现referenceerror
- c# - 下载后解压 zip 文件时,出现异常,提示该文件正在被另一个进程使用
- php - 在 PHP 中找不到类 ParseClient
- javascript - 如何在另一个对象数组中初始化一个对象数组?
- python - 通过视图提交表单时获取“NOT NULL 约束”。通过 /admin 添加时工作正常
- c# - 为什么这个功能和一个完全相同的格式不起作用是有原因的吗?
- google-sheets - 在 Google 表格中错开重复日期?
- oracle - 我刚刚在 plsql 中创建了这个触发器
- cordova - 离子科尔多瓦资源--splash和--icon错误
- c# - 我应该使用哪个 MySql InnoDB 事务隔离级别?