sql - SQL Server:避免子查询
问题描述
我想在下面的查询中避免子查询:
SELECT ID,[Start_Date],[End_Date],Assignment_Id
FROM (
SELECT ID, MIN([Start_Date]) AS [Start_Date], MAX([End_Date]) AS [End_Date]
FROM EmployeeTable
WHERE ID IN (123456) AND ([status] ='A' OR ([status] ='C'))
GROUP BY ID, Assignment_Id
) T
WHERE [End_date] >= CONVERT(VARCHAR(10),GETDATE(),120)
以上请指教。
提前致谢。
解决方案
您可以在进行聚合后立即将外部where
子句转换为having
子句,您不需要使用OR
您可以直接使用IN
子句表达它:
SELECT ID, MIN([Start_Date]) AS [Start_Date], MAX([End_Date]) AS [End_Date]
FROM EmployeeTable
WHERE ID = 123456 AND [status] IN ('A','C')
GROUP BY ID, Assignment_Id
HAVING MAX([End_Date]) >= CAST(GETDATE() AS DATE);
推荐阅读
- ansible - 如何将发现的值放入循环变量中,以便它们位于一行
- ansible - WSO2APIM:以编程方式添加身份提供者
- html - CSS如何在恰好到达页脚上方后分页表格并以相同的高度继续表格?
- php - Laravel Nova 资源解析使用不使用属于
- xamarin.android - 无法将 xamarin 应用上传到播放控制台。需要相机隐私政策
- wpf - 在桌面应用程序中存储 Auth0 设置的最佳做法?
- apache-spark - 使用内置函数在 Spark SQL 中将一组映射合并/连接成一个映射
- arrays - 以大 O(n) 运行时间复杂度以公平随机方式将所有行从一个文件复制到另一个文件
- android - Cardview 内的按钮不可点击
- wordpress - WordPress > JavaScript redirect doesn't work on mobile devices