SQL Server: انضم إلى جدول مشتق يحتوي على جملة؟
-
30-09-2019 - |
سؤال
أرغب في الانضمام إلى جدول فرعي / مشتق يحتوي على جملة مع البند (الفقرة الضرورية للتصفية على ROW_NUMBER() = 1
). في Teradata ، سيعمل شيء مشابه بشكل جيد ، لكن Teradata يستخدم QUALIFY ROW_NUMBER() = 1
بدلا من شرط مع.
ها هي محاولتي في هذا الانضمام:
-- want to join row with max StartDate on JobModelID
INNER JOIN (
WITH AllRuns AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY JobModelID ORDER BY StartDate DESC) AS RowNumber
FROM Runs
)
SELECT * FROM AllRuns WHERE RowNumber = 1
) Runs
ON JobModels.JobModelID = Runs.JobModelID
ما الخطأ الذي افعله؟
المحلول
ربما تكون إضافة حالة انضمام أقل كفاءة ، ولكن عادةً ما تعمل بشكل جيد بالنسبة لي.
INNER JOIN (
SELECT *,
ROW_NUMBER() OVER
(PARTITION BY JobModelID
ORDER BY StartDate DESC) AS RowNumber
FROM Runs
) Runs
ON JobModels.JobModelID = Runs.JobModelID
AND Runs.RowNumber = 1
نصائح أخرى
يمكنك استخدام متعددة مع البنود. شيء مثل
;WITH AllRuns AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY JobModelID ORDER BY StartDate DESC) AS RowNumber
FROM Runs
),
Runs AS(
SELECT *
FROM AllRuns
WHERE RowNumber = 1
)
SELECT *
FROM ... INNER JOIN (
Runs ON JobModels.JobModelID = Runs.JobModelID
لمزيد من التفاصيل حول الاستخدامات/الهيكل/القواعد انظر مع common_table_expression (Transact-SQL)
لا تنتمي إلى StackOverflow