0

我正在尝试使用两个日期字段(开始日期和结束日期)从表中选择数据。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

4 回答 4

3

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

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

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

于 2009-09-16T01:40:42.293 回答
1

好吧,老实说,它对我来说看起来不错。我怀疑有过滤你的结果的语句,或者 where 和有语句的组合。

于 2009-09-16T01:43:52.277 回答
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

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

于 2009-09-16T02:05:04.500 回答
0

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

再次感谢大家。

于 2009-09-16T02:11:39.257 回答