sql - 获取第一个开始时间和最后一个结束时间
问题描述
我在第一张图片中有一个初始查询结果。
select
rpt_mem.Member_Full_Name as Member,
rpt_mem.Email_Address as [Work Email],
CONVERT(VARCHAR(10), Date_Time_Start, 101) as [Shift Start Date],
MIN(CONVERT(VARCHAR(5), Date_Time_Start, 108)) as [Shift Start Time],
CONVERT(VARCHAR(10), Date_Time_End, 101) as [Shift End Date],
MAX(CONVERT(VARCHAR(5), Date_Time_End, 108)) as [Shift End Time]
from Schedule
where rpt_mem.Member_Full_Name = 'Member1'
AND CONVERT(VARCHAR(10), Date_Time_Start, 101) = '10/04/2020'
如何修改查询以仅获取第一个班次开始时间和最后一个结束时间,如第二张图片
解决方案
你也可以这样做——
select
rpt_mem.Member_Full_Name as Member,
rpt_mem.Email_Address as [Work Email],
CONVERT(VARCHAR(10), MIN(Date_Time_Start), 101) as [Shift Start Date],
CONVERT(VARCHAR(5), MIN(Date_Time_Start), 108) as [Shift Start Time],
CONVERT(VARCHAR(10), MAX(Date_Time_End), 101) as [Shift End Date],
CONVERT(VARCHAR(5), MAX(Date_Time_End), 108) as [Shift End Time]
from Schedule rpt_mem
where rpt_mem.Member_Full_Name = 'Member1'
AND CONVERT(VARCHAR(10), Date_Time_Start, 101) = '04/10/2020'
GROUP BY
rpt_mem.Member_Full_Name,
rpt_mem.Email_Address;
这是一个 db fiddle 链接 - https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=61da8cab5471d21818eb5b7fec8d509c
推荐阅读
- list - 在给定所有可能组合的列表的情况下实现排列
- linux - 如何强制 g++ 尊重#define _POSIX_C_SOURCE 200809L
- delphi - 使用 StringList 解析文本:\n vs #13#10 vs sLineBreak
- html - 更新方法传递旧值而不是 Angular 中的新值
- c - 如何在需要用户输入的程序中使用 c 中的 gnu 调试器
- php - 使用 laravel 服务并将代码注入控制器
- android - 如何使用 ARCORE 从 ARScene 相机扫描二维码
- java - OKHttp的BufferedSink(或BufferedSource)中如何实现seek()函数?
- python - Tkinter 通过命令 lambda 传递 StringVar.get 给出初始值
- c++ - 为什么我的多线程代码比串行版本慢,我该怎么做才能加快速度?