MSSQL: Zeile nach Datums bereich auswählen

brauh

Mitglied
Hallo Zvoni,
Was ist mit Tickets, welche mehr als einen Monat laufen?
=> Immer im jeweiligen Monat zählen

Welcher soll gezeigt werden?
=> Alle Monate in denen ein Ticket nicht geschlossen ist soll gezählt werden

VG
Burghard
 

Anhänge

  • Tickets Beispiel.csv
    51,2 KB · Aufrufe: 1

brauh

Mitglied
with base as (
select mrId, mrTimestamp, mrNEWFIELDVALUE,
row_number() over(partition by mrId order by mrTimestamp) as 'row'
from footprints.dbo.MASTER8_FIELDHISTORY
)

Meine Abfrage um die CSV Liste zu erstellen ( die Liste habe ich dann gekürzt)
 

brauh

Mitglied
OK, nach ein wenig Recherche läufts wohl auf folgendes hinaus:
Lückenlose Calendar-Table/View mit nem LEFT JOIN auf deine Daten, und dort ein IFNULL kombiniert mit der LAG-Funktion auf das Status-Feld sollte es wohl richten, und dann sempers Lösung aus Post #2 auf das Result-Set anwenden
Da muss ich leider passen... :)
 

brauh

Mitglied
Ziel ist es ein Tabelle zu haben, die mir alle Tickets listet die am 1. eines Monats nicht Status Closed hatten. Wenn ein Ticket z.B. 3 Monate nicht geschlossen war dann jeweils immer am 1. des Monats eine Zeile mit anzeigen.

VG
Burghard
 

Zvoni

Erfahrenes Mitglied
OK, verstanden.

Was ist mit Tickets, welche innerhalb eines Monats "erledigt" werden?
Beispiel:
Ticket eröffnet: 04.03.2021
Ticket geschlossen: 15.03.2021
Hier gibt es keinen "Monats-Ersten"
 

Zvoni

Erfahrenes Mitglied
OK, ich kann dir ein Teilergebnis liefern.
Ich hab das mit der LAG-Funktion nicht hinbekommen, weil man es wahrscheinlich per Rekusrion machen muss.
Setzt voraus dass du eine Tabelle "dates" hast, welche eine Spalte "Datum" hat, welches einfach fortlaufende Tagesdaten sind.
SQL:
SELECT
T1.Datum,
T2.mrID,
T3.mrnewFieldvalue
FROM
dates T1
INNER JOIN
(SELECT
mrID,
Date(Min(mrTimeStamp)) As MinStamp,
Date(Max(mrTimeStamp)) As MaxStamp
FROM tickets
GROUP BY
mrID) As T2
ON
T1.Datum BETWEEN T2.MinStamp And T2.MaxStamp
LEFT JOIN
tickets T3
ON
T3.mrID=t2.mrID AND
Date(T3.mrTimeStamp)=T1.Datum
ORDER BY
T2.mrID,
T1.Datum
Ergibt für mrID=694185 (ich habe deine ursprüngliche CSV benutzt)
Rest dann in der Nachbereitung.
Oder Yaslaw hat noch ne Idee
2021-03-11694185Open
2021-03-12694185
2021-03-13694185
2021-03-14694185
2021-03-15694185In__bProgress
2021-03-15694185Closed
 

Zvoni

Erfahrenes Mitglied
HA!
Ich habs!
SQL:
WITH cte As (
    SELECT
    mrID,
    Date(Min(mrTimeStamp)) As MinStamp,
    Date(Max(mrTimeStamp)) As MaxStamp
    FROM
    tickets
    GROUP BY mrID
)
SELECT
cte.mrID,
dates.datum,
(
SELECT T1.mrNewFieldValue
FROM tickets T1
WHERE
T1.mrID=cte.mrID AND
Date(T1.mrTimeStamp)<=dates.datum
ORDER BY T1.mrTimeStamp DESC LIMIT 1) As mrNewFieldValue
FROM
cte
LEFT OUTER JOIN
dates
ON
dates.datum BETWEEN cte.MinStamp AND cte.MaxStamp
Ergibt für 694185
Es fehlt der Eintrag In__bProgress
aber der war am gleichen Tag wie Closed jedoch früher, und ich ziehe nur den letzten Eintrag pro Tag
mrIDdatummrNewFieldValue
6941852021-03-11Open
6941852021-03-12Open
6941852021-03-13Open
6941852021-03-14Open
6941852021-03-15Closed