SQL查询在两个日期字段之间选择数据
题
我正在尝试使用两个日期字段(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
解决方案
因为您的数据库中没有记录
CONFIRMED = 1 AND WP.PROGRAMTYPE IN('1')WP.PROGRAMSTARTDATE&gt; ='2009-01-02'
??
编辑:由于 @David Andres 指出“ COUNT(WPP.PROGRAMCODE)&gt; ; 1 代码>&QUOT;条款似乎是罪魁祸首的候选人。
其他提示
嗯,老实说,这对我来说很好看。我怀疑有语句过滤你的结果,或者是where和having语句的组合。
先生们,非常感谢你的帮助。通过分析你所说的所有内容并尝试不同的建议,我实际上发现代码是正确的。但是,在该时间范围内,用户在该时间范围内没有参加多个节目。如果我再回去一年,预期的数据会出现。所以基本上只是用户对程序的逻辑关注因素的简单问题。
再次感谢大家。
看起来您的答案为零,例如“零用户在该日期范围内参与了多个计划”
您可以采取哪些措施来确认这一点,稍微修改您的查询,以显示每个用户 参与的程序数量:
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子句,似乎是你痛苦的原因。
不隶属于 StackOverflow