簡體   English   中英

SQL Server查詢聯接兩個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM