推 我在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。
谢谢你!