sql - 从每个名称的当前日期获取最后 5 个日期
问题描述
嗨,你能帮我查询以下输出吗?我需要每个名称和每个日期的最后 5 个活动天数。
输入
Name date Active
==== ==== ========
N1 07-30-2018 Y
N1 07-31-2018 N
N1 08-01-2018 Y
N1 08-02-2018 Y
输出
Name date date2 Active
==== ========== ======= ======
N1 07-30-2018 07-25-2018 Y
N1 07-30-2018 07-26-2018 Y
N1 07-30-2018 07-28-2018 Y
N1 07-30-2018 07-29-2018 Y
N1 07-30-2018 07-30-2018 Y
N1 08-01-2018 07-27-2018 Y
N1 08-01-2018 07-28-2018 Y
N1 08-01-2018 07-29-2018 Y
N1 08-01-2018 07-30-2018 Y
N1 08-01-2018 08-01-2018 Y
N1 08-02-2018 07-28-2018 Y
N1 08-02-2018 07-29-2018 Y
N1 08-02-2018 07-30-2018 Y
N1 08-02-2018 08-01-2018 Y
N1 08-02-2018 08-02-2018 Y
我正在使用以下查询来获取此输出,请您更正一下
DECLARE @windowStart DATETIME SET @windowStart = '2016-08-01 00:00:00'
DECLARE @windowEnd DATETIME SET @windowEnd = '2016-09-01 23:00:00';
Select a.Wellname,cast(a.timestamp as date) as date1,b.timestamp --,date2 = dateadd(DAY,-N,timestamp)
From TableA --where cast(timestamp as date)>=@windowStart and cast(timestamp as date)<= @windowEnd
Cross Join (
Select *
from (
Select distinct m.wellname, cast(m.[timestamp] as date) as timestamp ,Rank() Over ( partition by m.wellname order by timestamp desc) as Rank
from TableA m
where m.updown<>'D' and cast(m.[timestamp] as date) <= (Select cast(T.timestamp as date) from dbo.odr_nd_well_data T where cast(T.timestamp as date)=cast(a.timestamp as date)) and m.wellname in ('WN1','WN2')
group by m.wellname,m.timestamp
) a where a.rank<=5
) B
--on a.wellname=b.wellname
where a.wellname='WN1' and cast(a.timestamp as date)>=@windowStart and cast(a.timestamp as date)<= @windowEnd
Order by a.wellname,a.date1,cast(b.timestamp as date)
解决方案
也许一个CROSS JOIN
带有临时计数表的
例子
Select A.*
,date2 = dateadd(DAY,-N,date)
From YourTable A
Cross Join (Select Top 5 N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1) B
Order By name,date,dateadd(DAY,-N,date)
退货
Name date date2
N1 2018-08-01 2018-07-27
N1 2018-08-01 2018-07-28
N1 2018-08-01 2018-07-29
N1 2018-08-01 2018-07-30
N1 2018-08-01 2018-07-31
N1 2018-08-02 2018-07-28
N1 2018-08-02 2018-07-29
N1 2018-08-02 2018-07-30
N1 2018-08-02 2018-07-31
N1 2018-08-02 2018-08-01
推荐阅读
- azure - Azure VPN 网关配置:Get-AzureRmVirtualNetworkGatewayConnection 返回 ResourceNotFound 错误
- amazon-web-services - AWS EC2:无法获取裸机实例 - 更新
- string - 在 if 循环中使用字符串长度作为参数
- c++ - 清理“QSettings”注册表项的最佳方法(Windows 上的 Qt 5)
- ios - SwiftUI:如何根据已经拖动的距离改变拖动速度?
- node.js - 将 Docker 用于节点应用程序时无法连接 Websocket
- html - 将三个表单按钮排成一行
- rust - 结构是否有一种安全的方法来存储将在结构外部修改的向量切片?
- visual-studio - VS 2017 - 更正后重新评估数据流警告
- openssl - 使用 openSSL API 从证书中获取 OCSP URL