在获取 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 servermysql ? 所以真的不是说“这是我需要的,为我做我的工作/家庭作业”的地方。展示您尝试过的方法、有效或无效的方法以及您需要帮助的地方。 大家好,我非常抱歉,在一次会议中将回复我的尝试和我的要求。 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 查询时需要帮助 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

需要关于 Sql 递归查询的帮助

需要帮助以获取访问表单以将值插入查询

Ruby - Songkick api - 在 events.location() 查询方面需要帮助 [关闭]

如何快速获取对特定网址的查询 [关闭]

需要帮助查找 SQL 代码中的语法错误 [关闭]

需要优化SQL查询的帮助