在SQL中,我有一个数据,我是带着一定的条件带过来的,下面是从表中拉出来的带[Status] = 0
的数据,但是表中还有带[Status] = 1
和[Status] = 2
的数据,在我想要的带[Status] = 0
的数据之后,我还想得到与[Status] = 1
或[Status] = 2
同名的[CL_Name]
,但我做不到,我的示例表如下。
| 姓名|时间戳|设备|CL_名称|现况|
| - ------|- ------|- ------|- ------|- ------|
| 涂胶输送机|2023年1月3日16时45分34.243秒|A类|稳定剂|无|
| 涂胶输送机|2023年1月3日16时50分34.247秒|A类|稳定剂|无|
| 涂胶输送机|2023年1月3日16时55分34.247秒|A类|稳定剂|无|
| 涂胶输送机|2023年1月3日17时00分34.247秒|A类|稳定剂|1个|
| 涂胶输送机|2023年1月3日17时05分34.247秒|A类|稳定剂|1个|
| 滚动平台|2023年1月3日18时05分34.247秒|B|真空|无|
| 滚动平台|2023年1月3日18时10分34.247秒|B|真空|1个|
| 滚动平台|2023年1月3日18时15分34.247秒|B|真空|1个|
我想在这里返回[Status] = 0,并且根据下一个[Status] = 1还是[Status] = 2返回每个[CL_Name] [Status] = 0
我的SQL代码是这样的:
SELECT [Name]
,[TIMESTAMP]
,[Equipment]
,[CL_Name]
,[Status]
--,(case when [Status] > 0 then [TIMESTAMP] end) OVER ( PARTITION BY [CL_Name]) as EndTime
FROM [dbo].[Cockpit]
where [TIMESTAMP] > DATEADD(day,-1,GETDATE()) and [Status] = 0
group by [Name], [Equipment], [Name], [TIMESTAMP], [Status]
我正在制作的表看起来像这样
| 姓名|时间戳|设备|CL_名称|现况|总时间最小值|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 涂胶输送机|2023年1月3日16时45分34.243秒|A类|稳定剂|无|十五|
| 涂胶输送机|2023年1月3日17时00分34.247秒|A类|稳定剂|1个||
| 滚动平台|2023年1月3日18时05分34.247秒|B|真空|无|五个|
| 滚动平台|2023年1月3日18时10分34.247秒|B|真空|1个||
我该如何进行此查询?
1条答案
按热度按时间nfg76nw01#
语法略有不同,因为现在没有SQL服务器,但逻辑应该是相同的。
1.选择所需的值,即仅保留所需的记录
1.计算
Min where status =0
和min where status =1
(列-status_0_ts, status_1_ts
)1.如果
Status =0
,则减去这2列并计算差值,否则为NULL[TIMESTAMP] > DATEADD(day,-1,GETDATE())
,请随意添加到您认为合适的位置| 姓名|CL_名称|设备|现况|最小时间戳|状态_0_ts|状态_1_ts|时间差异|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 涂胶输送机|稳定剂|A类|无|2023年1月3日上午16时45分34秒|2023年1月3日上午16时45分34秒|2023年1月3日上午17时00分34秒|0年0月0日0小时-15分钟-0.00秒|
| 涂胶输送机|稳定剂|A类|1个|2023年1月3日上午17时00分34秒|2023年1月3日上午16时45分34秒|2023年1月3日上午17时00分34秒|(无)|
| 滚动平台|真空|乙|无|2023年1月3日上午18时05分34秒|2023年1月3日上午18时05分34秒|2023年1月3日上午18时10分34秒|0年0月0日0小时-5分-0.00秒|
| 滚动平台|真空|乙|1个|2023年1月3日上午18时10分34秒|2023年1月3日上午18时05分34秒|2023年1月3日上午18时10分34秒|(无)|