sql-server - 如何与不同的列和空行联合
问题描述
我正在尝试获取 SQL Server 中的人员状态列表。
每天有人打卡时都会添加新记录,因此当天不存在行,但是在表历史记录中将至少有一条该人打卡的记录。
示例数据
| Name | Status | Date |
|------+--------+-------------------------|
| Joe | In | 2019-09-03 07:56:00.000 |
| Jack | In | 2019-09-03 06:52:00.000 |
| Joe | In | 2019-08-21 07:02:00.000 |
| Jack | In | 2019-08-14 06:09:00.000 |
| Jane | In | 2019-08-15 07:38:00.000 |
示例 SQL
select name, status
from timeclock
where clockInTime >= dateAdd(day, 0, dateDiff(day, 0, current_timestamp))
union
select name, status
from timeclock
where not exists (?)
第一个选择将包含 Joe 和 Jack,因为他们在过去 24 小时内打卡。
预期产出
| Name | Status |
|------+--------+
| Joe | In |
| Jack | In |
| Jane | Out |
我如何也只选择每个成员一次(不同),但将 Jane 的状态设为 out?
解决方案
这听起来像你想要的更多是这样的:
SELECT [Name],
CASE WHEN COUNT(CASE WHEN clockInTime >= dateAdd(day, 0, dateDiff(day, 0, current_timestamp)) THEN 1 END) > 0 THEN 'In' ELSE 'OUT' END AS [Status]
FROM timeclock
GROUP BY [Name];
这使用条件聚合,并且只计算时间之后的行数。
推荐阅读
- python - 如何在 Python 中使用 Tkinter 定位文本框?
- javascript - 如何使 Vue 组件与 v-model 保留值类型一起工作?
- reactjs - 传递 props 和连接组件之间的 React/Redux 性能差异
- c# - 为 DateTime 设置默认值的问题
- html - 自定义复选框 - 与 Chrome、FireFox 和 Safari 的兼容性
- sql-server - Spring Boot JPA ddl-auto 更新
- django - 对中间模型 django 的一个字段进行注释
- angular6 - 角度材料 6 个不同颜色的多个垫子滑块
- android - 在 BottomNavigationView 中的片段之间导航的正确方法是什么?
- java - 模块尚未部署