Meine Tabelle Trace
hat die folgenden Spalten:Mit MIN-Funktion mit einer Gruppe von in SQL Server
- trace_id: Primärschlüssel, int
- Order_ID: Fremdschlüssel Order (Order_id),
- status_id int: Fremdschlüssel-Status (status_id), int
- Trace_Date: Datum
- Trace_Hour: Zeit
- Trace_CreationDate: datetime2 (= getdate())
ich für jeden retreive benötigen, um die Mindest (die kleinste) Trace_Date
und seine Trace_Hour
mit dem Status ‚Geschlossen‘ (Tabelle Status
) entspricht.
Die Schwierigkeit für mich ist, wie Sie die richtige Trace_Hour
abrufen, weil wir mehr als ein Vorkommen für das gleiche Datum für die gleiche Reihenfolge haben können.
Ein Beispiel mit nur einem Order_ID
kann die Situation besser zu verstehen helfen:
Trace_ID Order_ID Status_ID Trace_Date Trace_Hour Trace_CreationDate
---------------------------------------------------------------------------------------------------
176 502 1 2016-06-22 23:30:00.0000000 2016-07-08 09:18:39.0570000
177 502 6 2016-06-23 10:00:00.0000000 2016-07-08 09:18:39.0570000
178 502 37 2016-06-22 22:30:00.0000000 2016-07-08 09:18:39.0570000
Die status_ID = 1
hat den Status 'Geschlossen'. Also für die Order_id = 502
, ich möchte 2016-06-22
als Trace_Date
und 23:30:00
für Trace_Hour
abrufen.
Ich habe versucht, diese Abfrage zu verwenden:
WITH cte AS
(
SELECT
Order_ID, MIN(Trace_Date) AS Trace_Date
FROM
Trace t WITH (nolock)
INNER JOIN
[Status] s WITH (nolock) ON t.Status_ID = s.Status_ID
WHERE
s.Closed = 1
GROUP BY
Order_ID
)
SELECT
MIN(t.Trace_Date) AS Trace_Date,
MIN(Trace_Hour) AS Trace_Hour,
t.Order_ID
FROM
Trace t WITH (nolock)
INNER JOIN
cte WITH (nolock) ON t.Order_ID = cte.Order_ID
AND t.Trace_Date = cte.Trace_Date
GROUP BY
t.Order_ID
Diese Abfrage das richtige Ergebnis nicht zurück, weil es 2016-06-22
als Trace_Date
(Ok) abruft und 22:30:00
als Trace_Hour
, die nicht korrekt ist.
Ich habe keine deterministische Spalte, die ich mit der group by-Klausel verwenden kann, die es mir ermöglicht, die richtige Stunde abzurufen.
Hat jemand eine Idee, wie wir diese Aufgabe erledigen können?
Vielen Dank im Voraus für jede Hilfe
Sie zweite Auswahl sollte aus 'cte' auswählen, nicht aus' Trace', sonst was ist der Punkt von 'cte'? – CompanyDroneFromSector7G
Ich benutze die Tabelle Trace in der zweiten Auswahl, um die Spalte 'Trace_Hour', die nicht in der cte – user3569267
ist ja Entschuldigung sah ich, dass, nachdem ich den Kommentar - versucht zu löschen, aber S/O fehlgeschlagen :( – CompanyDroneFromSector7G