Sqlite 我们如何从时间表中找到所有员工都休过一个会计年度的长假或更多的假期?

Sqlite 我们如何从时间表中找到所有员工都休过一个会计年度的长假或更多的假期?,sqlite,nested,Sqlite,Nested,我们如何通过一个查询找到所有员工都休过一个会计年度的长假?这家公司认为其会计年度的持续时间大致包括本年度的秋季季度、明年的冬季季度和明年的春季季度。 (请不要仅仅用一个有效的解决方案来解释,因为知道如何解决会很好) 假设我们有一个表,其中包含所有雇员作为eid(字符串) 然后,一个表将一个计划表作为eid(字符串)、DEPAREID(字符串)、季度(字符串)、年度(整数)。 我们得到了一个时间表,以了解所有员工都有一个会计年度或更长的假期。(这个问题与我问的上一个问题不同,我们有一个不太好的日程

我们如何通过一个查询找到所有员工都休过一个会计年度的长假?这家公司认为其会计年度的持续时间大致包括本年度的秋季季度、明年的冬季季度和明年的春季季度。 (请不要仅仅用一个有效的解决方案来解释,因为知道如何解决会很好)

假设我们有一个表,其中包含所有雇员作为eid(字符串)

然后,一个表将一个计划表作为eid(字符串)、DEPAREID(字符串)、季度(字符串)、年度(整数)。 我们得到了一个时间表,以了解所有员工都有一个会计年度或更长的假期。(这个问题与我问的上一个问题不同,我们有一个不太好的日程安排表,而不是假期表)(请解释一下,不仅仅是工作解决方案,因为知道方法会很好)

查询应返回e02、e03、e05、e06、e07、, 自

到目前为止,我与上一个问题有什么不同。

此查询:

SELECT DISTINCT eid, year + (quarter = 'Fall') year
FROM schedule
返回每个
eid
和每年的不同行,但如果
季度
'Fall'
,则返回下一年,以便可以与下一年的
'Winter'
'Spring'
分组。

然后,您可以使用
LAG()
窗口函数获取上一年的每个
eid

SELECT *, LAG(year) OVER (PARTITION BY eid ORDER BY year) prev_year
FROM (
  SELECT DISTINCT eid, year + (quarter = 'Fall') year
  FROM schedule
)
最后过滤年与上一年差值大于1的所有
eid
s:

SELECT DISTINCT eid
FROM (
  SELECT *, LAG(year) OVER (PARTITION BY eid ORDER BY year) prev_year
  FROM (
    SELECT DISTINCT eid, year + (quarter = 'Fall') year
    FROM schedule
  )
)
WHERE year - prev_year > 1 
请参阅。
结果:

开斋节 e02 e03 e05 e06 e07
员工e01在2013年秋季工作,之后在2015年秋季工作,但在预期结果中不存在。为什么?是的,你是对的。把数据弄乱了。现在应该更正了,谢谢。但是用sqlite在本地测试了它,为什么e01仍然显示在结果中。@Johnlee我在编辑后使用您的示例数据。检查演示。是的,你又对了。我已经知道问题出在哪里了。非常感谢。以你为例。现在明白了。
SELECT *, LAG(year) OVER (PARTITION BY eid ORDER BY year) prev_year
FROM (
  SELECT DISTINCT eid, year + (quarter = 'Fall') year
  FROM schedule
)
SELECT DISTINCT eid
FROM (
  SELECT *, LAG(year) OVER (PARTITION BY eid ORDER BY year) prev_year
  FROM (
    SELECT DISTINCT eid, year + (quarter = 'Fall') year
    FROM schedule
  )
)
WHERE year - prev_year > 1