获取特定日期的信息并减去两个日期

时间:2014-07-11 21:08:54

标签: sql sql-server ssms

所以这更像是两个问题相结合,因为它是针对同一个表我正试图从

收集所有这些信息

TMNT在评论中的答案对于问题一:我正在尝试根据MAX日期收集一些信息。该表包含各种SiteID条目,其中包含各种日期以及我想要检索的各种信息量。但是,我只想捕获每个站点最近的最近日期和所有相应的信息。

在编写以下查询时,我会获得所有正确的SiteID

Select
sn.siteID,
MAX(sn.CreationDate)
From SiteNotifications sn
Group By sn.SiteID
Order By sn.SiteID

然而,一旦我开始写其他信息,我需要它开始显示我之前通知的日期而不是MAX日期。

Select
sn.siteID,
MAX(sn.CreationDate),
sn.NotificationMessage,
sn.CreatedByUserID
From SiteNotifications sn
Group By sn.SiteID, sn.NotificationMessage, sn.CreatedByUserID
Order By sn.SiteID

我很确定这与以下事实有关:因为有不同的用户,不同的通知消息等,所以它们会显示出来,因为它们是“唯一”的行。但是现在MAX无效,我完全不知道该怎么办。

评论中的LANGE回答 - 第二个问题:我试图减去两个DateTime时间来显示它们之间的天数。

我写这个

Select
DateAdd(d,-mino,maxo)
FROM
(Select 
sn.SiteID,
MAX(sn.CreationDate) Maxo,
MIN(sn.CreationDate) Mino
From SiteNotifications sn
Group By sn.SiteID)a 

它会给我一条错误信息,内容为

Operand data type datetime is invalid for minus operator.

我尝试使用CASTCONVERT转换日期,但一直给我同样的问题。 :(

1 个答案:

答案 0 :(得分:0)

对于第一个问题,因为您需要按网站ID的最大日期,无论其他字段如何,您都可以将查询更改为。

Select
 sn.siteID,
 MaxCreationDate.Maxo,
 sn.NotificationMessage,
 sn.CreatedByUserID
From SiteNotifications sn
INNER JOIN (SELECT SiteId, MAX(CreationDate)Maxo FROM SiteNotifications GROUP BY SiteId      )MaxCreationDate
 ON MaxCreationDate.SiteID = sn.SiteID AND sn.CreationDate = Maxo
 Group By sn.SiteID, sn.NotificationMessage, sn.CreatedByUserID, MaxCreationDate.Maxo
 Order By sn.SiteID

或者使用row_number和分区概念。

 WITH CTE AS (
  Select
  siteID,
  CreationDate
  NotificationMessage,
  CreatedByUserID, 
  Row_Number()OVER(Partition by siteID ORDER by CreationDate desc)RN
  From SiteNotifications)
 SELECT * FROM CTE
 WHERE RN =1