2013-04-25 75 views
0

我有一个场景,我想要得到一个计数,如果两个日期之间的日期差异是 < = 14 days.That是在第一个表中,我必须筛选记录中的任何一个值DATE1值是< = DATE2的14天。datediff在SQL中的多个记录

For Ex: 
q1="SELECT DATE1 FROM DATE1_TABLE"; 
q2="SELECT DATE2 FROM DATE2_TABLE"; 

My simple query : 

SELECT 
    COUNT(*) 
FROM 
    DATE1_TABLE WHERE DATEDIFF(DD,DATE1,(SELECT DATE2 FROM DATE2_TABLE))<=14 

但我有两个表中多条记录,但我想选择具有 这种差异,然后它会得到一个计数> 0.So任何记录,它抛出错误子查询返回的多个 多个记录。我想要一些解决方案。我正在使用SQL SERVER 2008

注意:我不能在这里使用连接,因为我想要两个不同的查询结果。 在此先感谢。

+0

正如你指出的,第二个表上有很多记载。那么第一张表中的哪些日期要与第二张日期中的哪些日期比较 - 所有这些日期,其中一些日期,还是什么?你想如何决定哪些记录与哪些记录进行比较? – 2013-04-25 11:01:32

+0

对不起,对错误的解释。我有2个查询第一个查询将给没有日期,第二个查询将只给出一个日期。我需要检查第一个查询中的任何日期<= 14的第二个查询的日期值。然后它会返回一个count.Thanks – mns 2013-04-25 11:13:56

+0

行,你只想从第二个表中选择一个日期,但*哪一个* - 最小,最大,中位数,其他日期...? – 2013-04-25 11:28:03

回答

0

不能使用SELECT将返回其中函数需要标量值多个值...但是你可以加入这些表:

SELECT 
    COUNT(DISTINCT dt1.*) 
FROM DATE1_TABLE dt1 INNER JOIN DATE2_TABLE dt2 ON DATEDIFF(DD,DATE1,DATE2)<=14 

这个查询将加入值只有当他们在14天内表和依靠来自DATE1_TABLE的唯一值。我不知道它的表现是否明智。

+0

您*可以*使用选择,如果选择将只返回一个值。 – 2013-04-25 11:29:56

+0

“哪里函数期望标量值” – 2013-04-25 11:37:29

1

您可以在查询中使用TOP 1子句..

SELECT TOP 1 * 
    FROM DATE1_TABLE 
    WHERE DATEDIFF(DD,DATE1,(SELECT DATE2 FROM DATE2_TABLE))<=14