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