2016-04-04 7 views
0

Ich bin mit SQL Server 2000 so traurig allgemeine Tabellenausdrücke sind, aber ich habe folgende 2 Tabellenstruktur:Rang() Äquivalent für SQL Server 2000

Rechnungen

id 

InvoiceQueryReasons

id 
    invoice_id 
    reason 
    date_queried 

Ich möchte innere Verbindung von Invoices zu InvoiceQueryReasons und erhalten nur 1 Zeile für jede Rechnung, die die neueste InvoiceQueryReasons Re wählt Kabel.

Wenn ich einen CTE mit Postgress war ich mit so etwas wie tun würde:

SELECT * 
FROM 
    (SELECT 
     "i"."id", "iq"."reason", "iq"."date_queried", 
     rank() OVER (PARTITION BY "invoice_id" ORDER BY "date_queried" DESC) AS "invoice_query_rnk", 
    FROM "invoices" i 
    INNER JOIN "InvoiceQueryReasons" iq ON ("i"."id" = "iq"."invoice_id") 
    ) AS "iqrs" 
INNER JOIN 
    "invoices" ON ("iqrs"."id" = "invoices"."id") 
WHERE 
    ("invoice_query_rnk" = 1) 

Entschuldigt, wenn die Abfrage nicht genau richtig ist, ich dies auf einer nicht-dev Maschine schreibe.

Wie könnte ich eine ähnliche Abfrage in SQL Server 2000 schreiben, wo ich keinen gemeinsamen Tabellenausdruck habe?

Antwort

0

Dies ist die Art, wie ich das 2000 in SQL Server immer zu tun pflegen:

FROM Table1 
INNER JOIN Table2 ON Table2.PrimaryKey=(
SELECT TOP 1 t2.PrimaryKey 
FROM Table2 t2 
WHERE t2.ForeignKey=Table1.PrimaryKey 
ORDER BY t2 DateColumn DESC 
) 
+0

..... oder *** schließlich *** Upgrade! ..... –

+0

Einverstanden. Sein 2016 für das Schreien laut. – granadaCoder

+0

die Entscheidung für ein Upgrade ist nicht meins :) und ich dränge darauf. Ich bin nur ein armer, bescheidener Bauunternehmer – dagda1