Wir versuchen, die Spalte "Rechnung" zu sortieren und nur die Rechnungen für die erste Lieferung unter Teilen der Rechnungen zu sortieren.SQL-Abfrage: Wie nutze ich die Timestamp-Spalte zwischen den Spaltenwerten?
Das ist in dieser Spalte haben wir mehrere Rechnungen. Wir möchten diese Gruppe von Rechnungen unter der Rangspalte auswählen, die aus dem frühesten Zeitstempel besteht.
Art der Timestamp-Spalte:
Der SQL Server-Zeitstempel-Datentyp hat nichts mit Zeiten zu tun, oder geht es nur eine binäre Zahl ist eine Sequenz Timestamp-Spalte, um anzuzeigen, aufgezeichnet wird, und erhöhte jedes Mal, wenn eine Datensatz wird hinzugefügt.
Wir haben versucht, folgende Abfrage:
select *
from
(select
myrank = rank() over (partition by a.SalesOrder order by c.Invoice),
c.Invoice, c.TimeStamp
from
OrderDetail a
left join
OrderMaster b on a.SalesOrder = b.SalesOrder
left join
InvoiceDetail c on a.SalesOrder = c.SalesOrder
and a.SalesOrderLine = c.SalesOrderLine
where
a.SalesOrder = '218438'
and c.LineType = '1'
and b.OrderStatus = '9') z
Beispieldaten:
myrank | SalesOrder | SalesOrderLine |Invoice | TimeStamp
1 218438 8 207964 0x0000000048CD8CD4
2 218438 1 207965 0x0000000048CD8CD5
2 218438 2 207965 0x0000000048CD8CD6
2 218438 3 207965 0x0000000048CD8CD7
2 218438 4 207965 0x0000000048CD8CD8
2 218438 5 207965 0x0000000048CD8CD9
2 218438 6 207965 0x0000000048CD8CDA
2 218438 7 207965 0x0000000048CD8CDB
Erwartete Daten:
Akte Rang sein sollten als Erste Sendung Rechnung und Erste Added Bilanz auf die Basis des Zeitstempels Was sollte das sein? Ausgabe Wenn ich 2 als meinen Rang auswähle
myrank | SalesOrder | SalesOrderLine |Invoice | TimeStamp
1 218438 8 207964 0x0000000048CD8CD4
Vielen Dank im Voraus!
Wie über die Tabellendefinition als Ausgangspunkt? So wie es ist, raten wir, was Sie hier zu tun versuchen. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
Tatsächlich wird der 'timestamp'-Datentyp auch bei jeder Aktualisierung von a geändert Aufzeichnung. Es ist eine Lösung für Parallelität durch Versionierung des Datensatzes. Wenn zwei Prozesse versuchen, den gleichen Datensatz zu ändern, wird einer von ihnen verlieren, weil ihr "Zeitstempel" nicht mehr mit dem auf dem Datensatz übereinstimmt. – Igor
'Die Zeitstempelspalte wird jedes Mal aufgezeichnet und inkrementiert, wenn ein Datensatz hinzugefügt wird. - Wenn dies der Fall ist, nach dem Sie suchen, können Sie den ersten in einer Sequenz hinzugefügten Datensatz identifizieren und eine 'identity'-Spalte und keinen' timestamp' hinzufügen Säule. Dies würde SQL-Server für jeden neuen Datensatz inkrementiert werden und dann würde der Wert nicht geändert werden. – Igor