获取sql查询需要帮助

时间:2014-03-23 04:59:38

标签: sql

需要您的帮助来获取以下数据的SQL查询

TableName: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,其中Flag设置为Yes,处理日期是旧Date。 即在上表中每个Emp有2条记录,我需要选择一个员工只有一条记录的记录,其处理日期是旧日期,标志设置为是。

此致 圣

3 个答案:

答案 0 :(得分:1)

老实说,你的结构设计看起来非常糟糕。您似乎使用 varchar 来存储布尔概念而不是

关于日期,我想你会简化你的问题,但要小心比较日期可能会很棘手。

所以,我要按照说明回答你的问题:

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的答案。

答案 1 :(得分:1)

我认为这就是你要找的东西?

我解释了这个问题,因为你想确保员工在表格中没有另一条记录,其中标志是" No",所以这个查询会检查它。

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"

答案 2 :(得分:0)

试试这个:

select distinct EMPID
from EMP_DB
where Flag ='yes'
and Processing Date = 'Old Date'