sql - 当列上存在日期时间时获取唯一行
问题描述
您好,我有一张桌子,每次我数一块时我都会在其中插入。使用一个订单,在同一天可能会有多个订单。在该表中,我将插入当前班次。我想要做的是获得每个班次的第一行,如果在那个班次中超过 1 个订单并不重要。
目前这是我的查询:
SELECT DISTINCT Part [Model], Station , Operators, Workorder, ShiftId,
min([Date]) [StartDate], CONVERT(date, min([Date])) [StartDateFormat]
FROM Orders
WHERE Station IN ('S1', 'S2')
group by Part, Station, Operators, Workorder, ShiftId
order by Station
有关完整示例,请查看此 SQL Fiddle
我期望的结果如下表:
Model | Station | Operator | Workorder | ShiftId | StartDate | StartDateFormat |
A1 | S1 | 5 | 45010001 | 1 | 2020-01-17T10:24:08Z | 2020-01-17 |
A1 | S1 | 5 | 45010022 | 2 | 2020-01-17T11:35:08Z | 2020-01-17 |
A1 | S1 | 15 | 45010004 | 3 | 2020-01-18T19:35:08Z | 2020-01-18 |
Rows for Station S2 Are OK
换句话说,我想从每个班次中获得第一行
解决方案
有很多方法可以解决这个前 1 个每组问题。
一种解决方案是使用相关子查询进行过滤:
select o.*
from orders o
where o.date = (
select min(o1.date)
from orders o1
where o1.shiftId = o.shiftId and cast(o1.date as date) = cast(o.date as date)
)
order by o.date
这为您提供了每天和班次的最早记录。
如果您想在所有天中每个班次的第一条记录,您可以稍微修改查询:
select o.*
from orders o
where o.date = (
select min(o1.date)
from orders o1
where o1.shiftId = o.shiftId
)
order by o.date
我也喜欢反left join
技术:
select o.*
from orders o
left join orders o1
on o1.shiftId = o.shiftId
and cast(o1.date as date) = cast(o.date as date)
where o1.id is null
order by o.date
推荐阅读
- java - 启动设置了默认值的 Popupwindow 时出现 NullPointerException,否则它可以工作
- javascript - R <-> JS:遍历 XML 节点并将 getComputedStyle 值返回到数据框
- ios - 如何解决 Ionic 4 到 IOS 应用程序中的错误“EXC_CRASH (SIGKILL)”
- android - 基于 res 值的活动导向
- javascript - 通过 PHP 进行 JSON 解码
- html - Django 项目 - 没有在浏览器中呈现的脆皮表单
- spring - 将 Spring Boot Hibernate 应用程序部署到 Tomcat 服务器中
- r - 在 R 中使用异常化库时如何将日期列设置为索引?
- angularjs - 当它不是angularjs中的json时响应的奇怪行为得到
- python - IDE 中的异常对象和缺少 __context__ 和 __cause__ 属性