CREATE TABLE rpt_tab (
e_id NUMBER(10),
region VARCHAR2(20),
stages VARCHAR2(20),
end_date DATE
);
INSERT INTO rpt_tab VALUES(11,'Mumbai','STG_1','12-04-22');
INSERT INTO rpt_tab VALUES(12,'France','STG_1','13-04-22');
INSERT INTO rpt_tab VALUES(13,'France','STG_1','14-04-22');
COMMIT;
Ich muss eine Logik schreiben, die mir die Daten liefert, nachdem ich den letzten Dienstag aus der end_date
Spalte gefunden habe. Ich brauche einen Bericht mit der folgenden Logik:
SYSDATE
und der Tag Dienstag ist, dann sollte der Bericht mir nur die heutigen Datumsdaten geben.Mein Versuch:
WITH a AS(
SELECT COUNT(*) since_tuesday FROM rpt_tab
WHERE --end_date need to fetch the data count based on the end_date column and check Tuesday week day.
GROUP BY stages
)
SELECT since_tuesday FROM a;
Erwartete Ausgabe, wenn das Datum der 12. April (Dienstag) ist:
+--------------+
| since_tuesday |
+--------------+
| 1 |
+--------------+
Erwartete Ausgabe, wenn das Datum der 13. April ist:
+--------------+
| since_tuesday |
+--------------+
| 2 |
+--------------+
Erwartete Ausgabe, wenn das Datum der 14. April ist:
+--------------+
| since_tuesday |
+--------------+
| 3 |
+--------------+
Sie müssen überprüfen, ob sysdate Dienstag ist, und von dort aus die Zählung auffüllen.
Lösung des Problems
Dazu können Sie die NEXT_DAY()
Funktion verwenden:
WITH rpt_tab AS
(
SELECT 11 as e_id,'Mumbai' as region,'STG_1' as stages, '12-04-22' as end_date FROM dual UNION ALL
SELECT 12,'France','STG_1','13-04-22' FROM dual UNION ALL
SELECT 13,'France','STG_1','14-04-22' FROM dual
)
SELECT COUNT(*)
FROM rpt_tab
WHERE TO_DATE(end_date,'DD-MM-YY') BETWEEN TRUNC(NEXT_DAY(TO_DATE(end_date,'DD-MM-YY'),'TUESDAY') - 7) AND TRUNC(NEXT_DAY(TO_DATE(end_date,'DD-MM-YY'),'TUESDAY'))
AND TO_DATE(end_date,'DD-MM-YY') <= TRUNC(SYSDATE);
Keine Kommentare:
Kommentar veröffentlichen