我可以在sql server查询中替换此循环吗?

时间:2017-09-12 13:44:26

标签: sql-server-2008

我有一个项目列表,按日期降序排序,并按如下方式检查:

counted = 0
DateToCheck = now  

foreach(item)
{
   if( abs(item.date - DateToCheck) > 14 days )
   {
      counted++
   }
   DateToCheck = item.date
}

目标是获取列表中未在上一个项目的14天内发生的项目计数。

该表只是一个日期列表,如下所示:

 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天内。

2 个答案:

答案 0 :(得分:1)

如果您没有ID列,则可以使用此查询。如果您有ID列,请直接使用ID列。

import Foundation

class SongAttributes {
    var songTitle: String
    var songURL: String

    init(songTitle: String, songURL: String) {
        self.songURL = songURL
        self.songTitle = songTitle

    }
}

使用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; 

答案 1 :(得分:1)

您可以使用此查询。

time