sql - 如何创建一个视图,在 SQL 中按类型将两个字段中的日期分开
问题描述
我正在尝试使用此表警报:
ID CarID Location Date Type
897847 7198 3 2019-11-26 11:54:54 20
897852 7198 3 2019-11-26 11:55:14 21
1001987 7198 3 2019-12-10 16:08:28 20
1001988 7198 3 2019-12-10 16:08:38 21
要创建一个按类型(20 或 21)分隔 Date 的视图,并使用 timediff 计算 then 和尊重相同 carID 和 Location 之间的差异,得到如下结果:
ID CarID Location InicialDate(20) EndDate(21) Total
897847 7198 3 2019-11-26 11:54:54 2019-11-26 11:55:14 00:00:20
1001987 7198 3 2019-12-10 16:08:28 2019-12-10 16:08:38 00:00:10
在某些情况下,类型 20 的日期会出现 2,3 或 4 次,然后才会出现类型 21 的日期,所以我需要始终获得第一个日期类型 20 和第一个日期类型 21,第二个类型 20 和第二个类型 21 和如此总是尊重相同的汽车ID和位置,不能是相同的汽车和不同的位置,反之亦然。
有什么可以帮助我的想法吗?谢谢
解决方案
对于 SQL Server:-
供参考检查这里
;with cte as (select dense_rank() over( order by CarID,Location,cast(Date as date)) dr,
* from tbl),cte1 as(
select dr,min(ID) ID,CarID,Location,type,min(date) min_date,max(date) max_date from cte
group by dr,CarID,Location,type)
select min(ID) ID,CarID,Location,min(min_date) [InicialDate(20)],max(max_date)[EndDate(21)],
datediff(second,min(min_date),max(max_date)) total
from cte1
group by CarID,Location,dr
对于 MySql:-
供参考检查这里
select min(ID) ID,CarID,Location,min(min_date) as `InicialDate(20)`,max(max_date)as `EndDate(21)`,
TIMESTAMPDIFF(second,min(min_date),max(max_date))as total
from (
select dr,min(ID) as ID,CarID,Location,type,min(date)as min_date,max(date) as max_date from (select dense_rank() over( order by CarID,Location,cast(Date as date)) as dr,
ID,CarID,Location,Date,Type from tbl)as cte
group by dr,CarID,Location,type) as cte1
group by CarID,Location,dr;
推荐阅读
- c# - 是否可以使用 C# 将 selenium 作为 Windows 服务运行?
- android-studio - IP摄像头与Android Studio之间的连接
- keras - 如何在 Keras 中构建概率矩阵输出层
- python - 在网站django2.2上搜索
- python - 使用 RNN 对 keras 中的序列数据进行预测
- docusignapi - 更改 DocuSign 信封上的发件人
- python - pytorch中输入参数多于1个时如何使用forward()方法
- laravel - 此路由不支持 GET 方法。支持的方法:PUT。与放置形式。拉拉维尔
- javascript - 如何覆盖或更改 javascript 预定义函数
- javascript - JavaScript:交叉点观察者 VS 滚动