在Sql Server 2012(T-SQL)上,我想分析同一用户ID的结束日期和开始日期之间的日期差异,并查看时间之间是否存在等于或大于12个月的差距。
因此,对于哪个ContractID,开始日期比上一个结束日期=> 12m。
ContractID UserID StartDate EndDate 12m Lapse
1 779 01/01/2000 01/01/2010 False
2 779 01/01/2010 01/01/2015 False
3 779 01/01/2016 NULL True
4 1021 09/03/2008 NULL False
值得注意的是,在真实表上,userID不是按顺序排列的,只有contractID是。
答案 0 :(得分:1)
创建样本数据:
DECLARE @T as table
(
ContractID int,
UserID int,
StartDate date,
EndDate date
)
INSERT INTO @T VALUES
(1, 779, '01/01/2000', '01/01/2010'),
(2, 779, '01/01/2010', '01/01/2015'),
(3, 779, '01/01/2016', NULL),
(4, 1021, '09/03/2008', NULL)
查询:
;WITH CTE AS
(
SELECT ContractID,
UserID,
StartDate,
EndDate,
LAG(EndDate) OVER(PARTITION BY UserId ORDER BY StartDate) As PreviousEndDate
FROM @T
)
SELECT ContractID,
UserID,
StartDate,
EndDate,
CASE WHEN DATEDIFF(MONTH, ISNULL(PreviousEndDate, StartDate), StartDate) >= 12 THEN
'True'
ELSE
'False'
END As '12m Lapse'
FROM CTE
结果:
ContractID UserID StartDate EndDate 12m Lapse
----------- ----------- ---------- ---------- ---------
1 779 2000-01-01 2010-01-01 False
2 779 2010-01-01 2015-01-01 False
3 779 2016-01-01 NULL True
4 1021 2008-09-03 NULL False
答案 1 :(得分:0)
SELECT * FROM Table WHERE DATEDIFF(M,StartDate,EndDate) >=12
答案 2 :(得分:0)
从SQL Server 2012开始,有一个名为Lag的函数可以帮助您获得所需内容。
窗口函数的<div class="col-md-8">
<table class="table table-striped">
<h3>Menu</h3>
<thead><tr><th>Dish</th><th>Price</th><th>Calories</th></tr></thead>
<tbody>
<%= @restaurant.each do |restaurant| %>
<tr>
<td><%= restaurant.menu.dish %></td>
<td><%= restaurant.menu.price %></td>
<td><%= restaurant.menu.price %></td>
</tr>
<tr><td>..</td><td>..</td><td>..</td></tr>
<% end %>
</tbody>
</table>
</div>
将确保它与partition by
隔开,而userID
将确保其按order by
顺序。
ContractID