我需要一些帮助来解决以下SQL请求
EmpId StartDate EndDate
1 1/2/2017 12/31/9999
1 8/10/2016 1/1/2017
1 10/11/2015 8/9/2016
1 2/10/2014 10/19/2015
以上是表格数据......
用户提供ex的日期范围: 用户输入日期范围10/11/2015 1/1/2017
Q1)我需要从表中提取对用户输入范围有效的所有记录 Q2)对于每个记录,我需要先前的记录开始日期 - 所以输出应该是这样的
EmpId StartDate EndDate Last Start Date
1 8/10/2016 1/1/2017 10/11/2015
1 10/11/2015 8/9/2016 2/10/2014
感谢任何帮助..
由于 斯
答案 0 :(得分:0)
如果开始日期和结束日期类型为DATE或TIMESTAMP:
,则此查询应该有效SET @rangeStart =' 2015/10/11&#39 ;; SET @rangeEnd =' 2017/01/01';
SELECT
`EmpId`,
`StartDate`,
`EndDate`,
(SELECT max(`StartDate`)
FROM `employees` e1
WHERE e1.`StartDate` < e.`StartDate`
ORDER BY e1.`StartDate` DESC
LIMIT 1) as `LastStartDate`
FROM `employees` e
WHERE @rangeStart <= `StartDate` AND `EndDate` <= @rangeEnd
GROUP BY `EmpId`, `StartDate`,`EndDate`
ORDER BY `EmpId`, `StartDate` DESC,`EndDate` DESC;
请参阅SQL Fiddle Here。由于您没有指定表名,我使用了员工。
也可以使用左连接来完成,在大型数据集上可能更快:
SELECT
e.`EmpId`,
e.`StartDate`,
e.`EndDate`,
IFNULL(e1.`StartDate`,"") as `LastStartDate`
FROM `employees` e
LEFT JOIN `employees` e1
ON e.`EmpId` = e1.`EmpId`
AND e1.`StartDate` < e.`StartDate`
WHERE @rangeStart <= e.`StartDate` AND e.`EndDate` <= @rangeEnd
GROUP BY `EmpId`, `StartDate`,`EndDate`
ORDER BY `EmpId`, `StartDate` DESC,`EndDate` DESC;
两者的SQL小提琴是here