GOOGLE ADS

Dienstag, 12. April 2022

So wird die Anzahl der Datensätze basierend auf Datum und Zyklus von Dienstag bis Dienstag gezählt

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_dateSpalte gefunden habe. Ich brauche einen Bericht mit der folgenden Logik:

  • Wenn heute der 12. April ist, dh SYSDATEund der Tag Dienstag ist, dann sollte der Bericht mir nur die heutigen Datumsdaten geben.

  • Angenommen, das Datum ist der 13. April, dh das Datum von morgen, dann sollte der Bericht mir die Datenzählung vom 12. April (Dienstag) und 13. April geben. Grundsätzlich wird der Zyklus von Dienstag bis Dienstag sein. Wenn das Datum der 19. April (Dienstag) ist, sollte die Datenzählung vom 12. bis 19. (Dienstag) erfolgen.

  • Wenn das Datum der 19. April ist, wird der Zyklus wie in Punkt Nr. 1 erwähnt fortgesetzt. 1, die prüft, ob das Sysdate Dienstag ist, und Sysdate gibt mir dann die Zählung.

  • 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

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...