在获取 sql 查询时需要帮助 [关闭]
Posted
技术标签:
【中文标题】在获取 sql 查询时需要帮助 [关闭]【英文标题】:Need help in getting the sql query [closed] 【发布时间】:2014-03-23 04:59:38 【问题描述】:在获取以下数据的 sql 查询时需要您的帮助
表名:EMP_DB
EMPID Flag Processing Date
ABC1 yes Current Date
ABC1 No Old Date
DEF1 Yes Current Date
DEF1 No Old Date
GHI1 Yes Old Date
JKL1 yes Current Date
JKL1 No Old Date
我只需要为上面的表选择 EMP ID,它的标志设置为是并且处理日期是旧日期。 即在上表中每个 Emp 有 2 条记录,我需要选择记录,其中员工只有一条记录,处理日期是旧日期,并且标志设置为 Yes。
问候, 圣
【问题讨论】:
很好。祝你好运。你有问题吗? 嗨,Marc,是的,我需要上述要求的 sql 查询 在sql server
或mysql
?
所以真的不是说“这是我需要的,为我做我的工作/家庭作业”的地方。展示您尝试过的方法、有效或无效的方法以及您需要帮助的地方。
大家好,我非常抱歉,在一次会议中将回复我的尝试和我的要求。 PS:感谢用户-jih,grantmc,crescent moon 的回应。
【参考方案1】:
我想这就是你要找的东西?
我解释了这个问题,因为您想确保员工在表中没有其他标志为“否”的记录,因此此查询会检查该记录。
SELECT E1.empid
FROM emp_db E1
WHERE lower(E1.flag) = 'yes'
AND E1.[processing date] = 'Old Date'
AND NOT EXISTS (SELECT 'X'
FROM emp_db E2
WHERE E1.empid = E2.empid
AND lower(E2.flag) = 'no')
在您的测试表中,此查询只会选择 ID 为 GHI1 的员工,因为所有其他人都有一个 flag = "No" 的条目
【讨论】:
你好,grantmc,谢谢你的回复,我会试试这个,让你知道【参考方案2】:老实说,你的结构设计看起来很糟糕。您似乎使用 varchar 来存储布尔概念而不是 bit。
关于日期,我猜你是在简化你的问题,但要小心比较日期可能会很棘手。
所以,我只是按照说明回答你的问题:
select emp.EMPID
from EMP_DB emp
left join EMP_DB empNo on empNo.EMPID=emp.EMPID and lower(empNo.Flag) = 'No'
where lower(emp.Flag) = 'yes' and emp.[Processing Date] = 'Old Date' and empNo is null
编辑:认真听取其他用户的建议,分享您的尝试。
Edit2:很难理解你的问题,我做了另一种@grantmc 的回答。
【讨论】:
嗨,谢谢你的回复...我会试试这个【参考方案3】:试试这个:
select distinct EMPID
from EMP_DB
where Flag ='yes'
and Processing Date = 'Old Date'
【讨论】:
occams 说这是正确的解释 @mhasan 我不明白你在这里所说的“occams”是什么意思,因为我在这里没有使用 occam 语言。 他的意思是你的答案是奥卡姆剃刀建议这是正确答案的最短含义。 @Crescent Moon:嗨,这个查询不会返回所有处理日期=旧日期的 emp 记录。对于每个 emp,DB 1 中将有 2 行,其中一条记录的处理日期为当前日期,标志为 yes,其他记录的处理日期为旧日期,标志为 No。但在少数情况下只有处理日期为旧日期且标记为“是”的员工才会有记录。我只需要识别只有一行处理日期为旧日期的 emp 记录,flag=yes @user3451428 我现在明白你的意思了。很抱歉之前无法理解。在您的情况下,最合适的解决方案是 grantmc 提供的解决方案,他在其中使用了 sql '不存在' 查询。这将确保您没有所选 EMPID 的任何其他记录,其中 flag = 'no' 和 processing date = 'current date'。所以,感谢grantmc。您也可以查看这篇文章 - ***.com/questions/18197366/… :)以上是关于在获取 sql 查询时需要帮助 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章