Sql server 2008 我可以在sql server查询中替换此循环吗
我有一个项目列表,按日期降序排序,它会像这样检查它们:Sql server 2008 我可以在sql server查询中替换此循环吗,sql-server-2008,Sql Server 2008,我有一个项目列表,按日期降序排序,它会像这样检查它们: counted = 0 DateToCheck = now foreach(item) { if( abs(item.date - DateToCheck) > 14 days ) { counted++ } DateToCheck = item.date } index ItemDate 307000 2017-08-17 307001 2017-04-25
counted = 0
DateToCheck = now
foreach(item)
{
if( abs(item.date - DateToCheck) > 14 days )
{
counted++
}
DateToCheck = item.date
}
index ItemDate
307000 2017-08-17
307001 2017-04-25
307002 2016-09-23
307003 2016-08-26
307004 2016-04-30
307005 2016-03-01
307006 2016-03-01
目标是获得列表中前一个项目14天内未出现的项目计数
该表只是一个日期列表,如下所示:
counted = 0
DateToCheck = now
foreach(item)
{
if( abs(item.date - DateToCheck) > 14 days )
{
counted++
}
DateToCheck = item.date
}
index ItemDate
307000 2017-08-17
307001 2017-04-25
307002 2016-09-23
307003 2016-08-26
307004 2016-04-30
307005 2016-03-01
307006 2016-03-01
这里的结果应该是6,最后一个被忽略,因为它是在前一个的14天之内 如果没有ID列,则可以使用此查询。如果有ID列,则直接使用ID列
;WITH TBL AS (
SELECT ROW_NUMBER() OVER(ORDER BY ItemDate ASC) Id, ItemDate FROM TABLE_NAME
)
SELECT COUNT(a.ItemDate) FROM TBL a INNER JOIN TBL b ON b.ID = a.ID + 1 WHERE DATEDIFF(d, a.CreatedOn, b.CreatedOn) > 14;
使用ID列,查询将更改为
SELECT COUNT(a.ItemDate) FROM TABLE_NAME a INNER JOIN TABLE_NAME b ON b.ID = a.ID + 1 WHERE DATEDIFF(d, a.CreatedOn, b.CreatedOn) > 14;
您可以使用此查询
DECLARE @item TABLE([index] int, [date] DATETIME)
INSERT INTO @item
VALUES( 307006 ,'2017-08-17'),
(307005 ,'2017-04-25'),
(307004 ,'2016-09-23'),
(307003 ,'2016-08-26'),
(307002 ,'2016-04-30'),
(307001 ,'2016-03-01'),
(307000 ,'2016-03-01')
SELECT
count(*)
FROM @item T1
OUTER APPLY (
SELECT TOP 1 *
FROM @item T2
WHERE T2.[index] < T1.[index]
ORDER BY T2.[index] DESC) T
WHERE DATEDIFF(DAY, T.[date], T1.[date]) > 14
DECLARE@item表([index]int,[date]DATETIME)
插入到@item中
价值观(307006,'2017-08-17'),
(307005 ,'2017-04-25'),
(307004 ,'2016-09-23'),
(307003 ,'2016-08-26'),
(307002 ,'2016-04-30'),
(307001 ,'2016-03-01'),
(307000 ,'2016-03-01')
挑选
计数(*)
来自@T1项
外部应用(
选择前1名*
来自@项目T2
其中T2.[index]14
您能将表架构包括在内吗?您有Id列吗对不起,我有Id列,我不知道它在这里是否重要。我有索引列,但我不能指望它们是顺序的使用第一行。它在ItemDate上对行号进行排序