SQL查询在两个日期字段之间选择数据

时间:2009-09-16 01:38:17

标签: sql select date datefield

我正在尝试使用两个日期字段(startdate和enddate)从表中选择数据。如果where子句中的两个日期字段都没有返回结果,则取出startdate字段会返回结果,结果如何?任何人都可以帮助解决这个困境

我的代码是:

   SELECT WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION 
     FROM WEBPROGRAMPARTICIPANTS WPP 
     JOIN WEBPERSONALINFO WPI ON WPP.USERID = WPI.USERID 
     JOIN WEBPROGRAMS WP ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
    WHERE CONFIRMED = 1 
      AND WP.PROGRAMTYPE IN ('1') 
      AND WP.PROGRAMSTARTDATE >= '2009-01-02' 
      AND WP.PROGRAMENDDATE < '2009-09-15'
 GROUP BY WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION 
   HAVING COUNT(WPP.PROGRAMCODE) > 1 
 ORDER BY WPP.USERID,
          WPI.EMAIL

编辑:

这是一个结果集来查看

USERID PROGRAMSTARTDATE        PROGRAMENDDATE
------ ----------------------- -----------------------
26167  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000 
26362  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000 
26411  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000 
26491  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000

4 个答案:

答案 0 :(得分:3)

因为您的数据库中没有记录

CONFIRMED = 1 AND WP.PROGRAMTYPE IN ('1') WP.PROGRAMSTARTDATE >= '2009-01-02' ??

编辑:正如@David Andres指出的那样,“COUNT(WPP.PROGRAMCODE) > 1”条款看起来像是罪魁祸首的候选人。

答案 1 :(得分:1)

嗯,老实说,这对我来说很好看。我怀疑有语句过滤你的结果,或者是where和having语句的组合。

答案 2 :(得分:0)

看起来您的答案为零,例如“零用户在该日期范围内参与了多个计划”

您可以采取哪些措施来确认这一点,稍微修改您的查询,以显示每个用户 参与的程序数量:

   SELECT WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION,
          COUNT(WPP.PROGRAMCODE)
     FROM WEBPROGRAMPARTICIPANTS WPP 
     JOIN WEBPERSONALINFO WPI ON WPP.USERID = WPI.USERID 
     JOIN WEBPROGRAMS WP ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
    WHERE CONFIRMED = 1 
      AND WP.PROGRAMTYPE IN ('1') 
      AND WP.PROGRAMSTARTDATE >= '2009-01-02' 
      AND WP.PROGRAMENDDATE < '2009-09-15'
 GROUP BY WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION 
 ORDER BY COUNT(WPP.PROGRAMCODE) DESC, 
          WPP.USERID,
          WPI.EMAIL

这应列出每个用户以及该日期范围的项目计数,首先按计数排序,然后按您最初设置的标准排序。它删除了having子句,似乎是你痛苦的原因。

答案 3 :(得分:0)

先生们,非常感谢你的帮助。通过分析你所说的所有内容并尝试不同的建议,我实际上发现代码是正确的。但是,在该时间范围内,用户在该时间范围内没有参加多个节目。如果我再回去一年,预期的数据会出现。所以基本上只是用户对程序的逻辑关注因素的简单问题。

再次感谢大家。