[英]SQL Server query to join two tables
我有一個兩部分的問題,其中通過使用Google設法在SQL中找到第一部分的答案, 獲得了最后日期時間記錄
用戶Osy代碼對我來說真的很好用,
下面是Osy的代碼!
select filename, dates, status
from yt a
where a.dates = (select max(dates)
from yt b
where a.filename = b.filename)
該查詢僅返回每個文件名的最新日期。
如果我能堅持與上面的網址相同的示例問題。
這是示例中使用的表:
yt
表:
+---------+------------------------+-------+
|filename |Dates |Status |
+---------+------------------------+-------+
|abc.txt |2012-02-14 12:04:45.397 |Open |
|abc.txt |2012-02-14 12:14:20.997 |Closed |
|abc.txt |2013-02-14 12:20:59.407 |Open |
|dfg.txt |2012-02-14 12:14:20.997 |Closed |
|dfg.txt |2013-02-14 12:20:59.407 |Open |
+---------+------------------------+-------+
問題的第二部分:
我現在想要實現的是,我有第二個表,並且希望將上面查詢的結果連接到文件名上並返回用戶。
表2
+--------+--------+
|filename |ref |
+---------+--------+
|abc.txt |Heating |
|dfg.txt |Cooling |
+---------+---- ---+
我試圖從查詢中獲得的結果如下,使用上述Osy的代碼僅返回每個設備每個條目的最新信息,然后顯示ref列而不顯示文件名
例:
+---------+------------------------+-------+
|ref |Dates |Status |
+---------+------------------------+-------+
|Heating |2013-02-14 12:20:59.407 |Open |
|Cooling |2013-02-14 12:20:59.407 |Open |
+---------+------------------------+-------+
我可以直接在yt表上使用內部聯接,但無法將(嵌套)與上述Osy的代碼結合使用。
使用SQL Server2012。如果遺漏任何內容,請告知我。
謝謝。
這可能是更快的方法。
SELECT [ref],
[dates],
[status]
FROM (SELECT a.[filename],
a.[dates],
a.[status],
t2.[ref],
ROW_NUMBER() OVER (PARTITION BY a.[filename] ORDER BY a.[dates] DESC) [Rn]
FROM yt a
JOIN Table2 t2 ON a.[filename] = t2.[filename]
) t
WHERE t.Rn = 1
繼續您發布的示例代碼,再次使用Table2
再執行一次JOIN
select t2.ref, xx.Dates, xx.Status
from Table2 t2 join (
select filename, dates, status
from yt a where a.dates = (
select max(dates)
from yt b
where a.filename = b.filename
)) xx on t2.filename = xx.filename;
推測底部查詢,但應該可以:
SELECT a.ref, MAX(b.Dates), b.Status
FROM Table2 AS a INNER JOIN yt AS b ON a.ref=b.filename AND b.Status='Open'
GROUP BY a.ref, b.Status
讓我知道是否有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.