【发布时间】:2014-03-09 21:56:33
【问题描述】:
我有一个表格,列出了不同用户的假期信息(用户名、假期开始和假期结束日期)——下面列出了 4 个用户:
Username VacationStart DeploymentEnd
rsuarez 2014-03-10 2014-03-26
studd 2014-01-18 2014-01-29
studd 2014-02-11 2014-02-26
studd 2014-03-02 2014-03-04
ssteele 2014-03-11 2014-03-26
ssteele 2014-03-18 2014-03-28
atidball 2014-03-05 2014-03-20
atidball 2014-03-06 2014-03-26
atidball 2014-03-13 2014-03-20
atidball 2014-03-18 2014-03-31
对于一个新查询,我只想显示 4 行,每个用户只显示一组假期日期,当前/正在进行的假期、未来/下一个假期(如果当前不存在)或最近的(如果以上两个都是假的)。
最终结果应该如下(假设今天是 3/9/2014):
Username VacationStart DeploymentEnd
rsuarez 2014-03-10 2014-03-26
studd 2014-03-02 2014-03-04
ssteele 2014-03-11 2014-03-26
atidball 2014-03-05 2014-03-20
假期日期实际上来自另一个表 (data_vacations),我将它留给了 data_users。我正在尝试在左连接语句中执行案例选择。
这是我之前尝试过的,但我的逻辑在那里失败了,因为我最终混合了不同的假期结束日期和假期开始日期:
SELECT Username, VacationStart, VacationEnd
FROM data_users
LEFT JOIN
(
SELECT userGUID,
CASE WHEN MIN(CASE WHEN (VacationEnd < getdate()) THEN NULL ELSE VacationStart END) IS NULL THEN MAX(VacationStart)
ELSE MIN(VacationStart) END AS VacationStart,
CASE WHEN MIN(CASE WHEN (VacationEnd < getdate()) THEN NULL ELSE VacationEnd END) IS NULL THEN MAX(VacationEnd)
ELSE MIN(VacationEnd) END AS VacationEnd
FROM data_vacations
GROUP BY userGUID
) b ON(data_empl_master.userGUID= b.userGUID)
我做错了什么?我该如何解决?
另外.. 附注.. 我是否在 LEFT JOIN 中正确执行此过滤?由于 data_users 更大,具有不同的用户 ID...我想根据上面的示例加入可用的假期信息,同时仍显示所有唯一的用户 ID。
【问题讨论】:
标签: sql sql-server-2008