SQL查询查找具有相关日期的行

时间:2017-06-16 12:16:02

标签: sql date rows exists combiners

我在firbird sql中有一个查询,它向我展示了员工的最后一份工作。有可能,工作显示多个,因为员工通常可能由一个客户。

我有一个类似的查询:

**employee** - **from** - **till** - **Customer**
Ronaldo - 2017-01-01 - 2017-03-31 - Real Madrid
Ronaldo - 2017-04-01 - 2017-05-20 - Real Madrid
Ronaldo - 2017-05-25 - 2017-06-10 - Barcelona
Ronaldo - 2017-06-13 - 2017-12-31 - Real Madrid

现在,我的结果应该是这样的:

Ronaldo - 2017-01-01 - 2017-05-20 - Real Madrid
Ronaldo - 2017-05-25 - 2017-06-10 - Barcelona

这意味着,我不想让最新的行和相关行与第一个和最后一个相结合,如果下一个不是旧的那么从第一个直到7天 - 其他我想要的已经展示了两者。

我的SQL现在是:

SELECT *
FROM 
(
 WITH TB_LA as
    (
    SELECT EP.PERSONALNR, max(EP.DATUMVON) as DATUMVON
    FROM EINSPERS EP, AUFTRAG A
    WHERE EP.PERSONALNR = 10337 AND EP.BERUFSCHL is not null AND EP.DATUMVON 

, TB_A as ( SELECT EP.PERSONALNR, EP.AUFTRAGNR, EP.DATUMVON, EP.DATUMBIS, K.KUNDENNR, 1 as PARM FROM EINSPERS EP, TB_LA, AUFTRAG A, KUNDEN K WHERE EP.BERUFSCHL is not null AND EP.DATUMVON <= TIMESTAMP 'TODAY' AND TB_LA.PERSONALNR = EP.PERSONALNR AND TB_LA.DATUMVON = EP.DATUMVON AND EP.AUFTRAGNR = A.AUFTRAGNR AND A.KUNDENNR = K.KUNDENNR ) , TB_H as ( SELECT EP.PERSONALNR, EP.AUFTRAGNR, EP.DATUMVON, EP.DATUMBIS, K.KUNDENNR, K.KUNDNAME, K.DISPONENT as DISPOKU, P.DISPONENT AS DISPOMA FROM EINSPERS EP INNER JOIN AUFTRAG A ON EP.AUFTRAGNR = A.AUFTRAGNR INNER JOIN KUNDEN K ON A.KUNDENNR = K.KUNDENNR INNER JOIN TB_LA ON TB_LA.PERSONALNR = EP.PERSONALNR INNER JOIN PERSONAL P ON P.PERSONALNR = EP.PERSONALNR LEFT JOIN TB_A ON TB_A.PERSONALNR = EP.PERSONALNR AND TB_A.KUNDENNR = K.KUNDENNR AND (TB_A.DATUMVON >= (EP.DATUMBIS-14) or TB_A.DATUMVON = EP.DATUMVON) WHERE EP.BERUFSCHL is not null AND EP.DATUMVON <= TIMESTAMP 'TODAY' AND EP.DATUMBIS >= TIMESTAMP '2017-01-31' AND CASE WHEN K.KUNDENNR = TB_A.KUNDENNR THEN 1 ELSE NULL END is null AND TB_A.PARM is null ) SELECT * FROM TB_H )

我的结果是:

employee   from    till    customer
10337   30.01.2017  31.01.2017  120495
10337   14.02.2017  19.02.2017  117769
10337   20.02.2017  20.02.2017  127507
10337   21.02.2017  05.03.2017  127507
10337   06.03.2017  12.03.2017  117769

至少我希望得到以下结果:

employee    from    till    customer
10337   30.01.2017  31.01.2017  120495
10337   14.02.2017  19.02.2017  117769
10337   20.02.2017  05.03.2017  127507
10337   06.03.2017  12.03.2017  117769

我该怎么做最后一步?我不知道要解决我的问题: - (

add:可以在ms sql或firebird sql中执行此操作,无论哪种方式,但我更喜欢firebird sql。

谢谢你!

0 个答案:

没有答案