2017-05-29 68 views
1

我一直在試圖查詢一些信息,但我似乎無法提出查詢。以下是表格信息和我目前的疑問。SQL Server單個查詢問題

公司表:

+-----------+-----------+------------+ 
| CompanyID | Address | PostalCode | 
+-----------+-----------+------------+ 
| a-coy  | 31 street |  111111 | 
| b-coy  | 32 street |  111222 | 
+-----------+-----------+------------+ 

修表:

+----------+-----------+----------------+------------+----------+ 
| SerialNo | CompanyID | PersonInCharge | RepairDate | RepairBy | 
+----------+-----------+----------------+------------+----------+ 
| 15000 | a-coy  | John   | 01-May-17 | Jason | 
| 15001 | a-coy  | John   | 02-May-17 | Jack  | 
+----------+-----------+----------------+------------+----------+ 

我的目標是繪製出查詢最近的維修工程它只有1的結果錄入。

我現在的疑問是如下:

SELECT 
    c.companyid, c.address, r.repairdate, r.repairby 
FROM 
    company c 
INNER JOIN 
    repair r ON c.companyID = r.companyID 
WHERE 
    c.companyid = 'a-coy' 

,我得到下面的結果:

+-----------+-----------+------------+----------+ 
| CompanyID | Address | RepairDate | RepairBy | 
+-----------+-----------+------------+----------+ 
| a-coy  | 31 street | 01-May-17 | Jason | 
| a-coy  | 31 street | 02-May-17 | Jack  | 
+-----------+-----------+------------+----------+ 

但我想要的結果纔剛剛與最新的修理日期的一項,它會長相酷似這樣的:

+-----------+-----------+------------+----------+ 
| CompanyID | Address | RepairDate | RepairBy | 
+-----------+-----------+------------+----------+ 
| a-coy  | 31 street | 02-May-17 | Jack  | 
+-----------+-----------+------------+----------+ 

回答

2
SELECT TOP 1 
c.companyid, 
c.address, 
r.repairdate, 
r.repairby 
FROM company c 
INNER JOIN repair r ON c.companyID=r.companyID 
WHERE c.companyid = 'a-coy' 
ORDER BY r.repairdate DESC 
+0

是的。要正確執行此操作,請確保在修復日期中添加索引。 – arboreal84

+0

在不需要時不創建索引。嘗試你的查詢,如果你沒有性能問題比不創建索引。索引過多會減慢插入/更新語句 – GuidoG

+0

感謝您的寶貴幫助。真的很感激它。 – LKH

-1

一種選擇是使用ROW_NUMBER()來識別每家公司的最新修理日期。

SELECT 
    t.companyid, 
    t.address, 
    t.repairdate, 
    t.repairby 
FROM 
(
    SELECT 
     c.companyid, 
     c.address, 
     r.repairdate, 
     r.repairby, 
     ROW_NUMBER() OVER (PARTITION BY c.companyid ORDER BY r.repairdate DESC) rn 
    FROM company c 
    INNER JOIN repair r 
     ON c.companyID = r.companyID 
) t 
WHERE t.rn = 1 AND 
     t.companyid = 'a-coy' 

如果我們想獲得多家公司的最新維修記錄,這將是一個不錯的選擇。給出的另一個答案適用於單個公司,但對於多個公司不會很好地擴展。

+0

感謝您的寶貴幫助。真的很感激它。 – LKH

+0

爲什麼這個沒有評論就低估了? –