我正在嘗試查詢文檔的最新狀態,但沒有取得任何成功。我用於查詢的表格是docs
,docStats
和statusList
。如何查詢SQL Server 2012中的最新記錄?
docs
表:
| docId | docTitle | venIdFk |
+-------+------------+---------+
| 1 | Contract 1 | 81 |
| 2 | Contract 2 | 37 |
+-------+------------+---------+
docStats
表:
| docStatIdPk | docStat | docStatDt | docIdFk |
+-------------+---------+-------------------------+---------+
| 7 | 1 | 2016-09-16 09:00:00.000 | 1 |
| 10 | 2 | 2016-09-16 09:30:00.000 | 1 |
| 11 | 4 | 2016-09-17 08:30:00.000 | 1 |
| 12 | 1 | 2016-09-17 10:00:00.000 | 2 |
+-------------+---------+-------------------------+---------+
statusList
表:
| statId | stat |
+--------+--------------+
| 1 | Needs Review |
| 2 | In Review |
| 3 | Denied |
| 4 | Accepted |
+--------+--------------+
使用下面的我能得到的文檔最近的文檔的狀態表:
SELECT
d2.docId, MAX(ds2.docStatDt) AS maxStatDt
FROM
docs d2
INNER JOIN
docStats ds2 ON d2.docId = ds2.docIdFk
GROUP BY
d2.docId
的結果是正確的:
| docId | maxStatDt |
+-------+-------------------------+
| 1 | 2016-09-17 08:30:00.000 |
| 2 | 2016-09-17 10:00:00.000 |
+-------+-------------------------+
但我需要附加列添加到查詢,而這正是它打破。它爲docId 1添加所有記錄,因爲'stat'包含在SELECT中,並且docId 1有多個狀態。我該如何編寫此查詢以便它只返回docId 1的最新狀態?
下面是該查詢,因爲我有現在:
SELECT
d.docid, d.doctitle, d.doctype, d.docorg, d.docdept,
s.stat,
mdt.maxdate AS crntDocStatDtSet
FROM
docs d
INNER JOIN
docstats ds ON d.docid = ds.docidfk
INNER JOIN
statuslist s ON ds.docstat = s.statid
INNER JOIN
(SELECT
d2.docid, Max(ds2.docstatdt) AS MaxDate
FROM
docs d2
INNER JOIN
docstats ds2 ON d2.docid = ds2.docidfk
GROUP BY
d2.docid) mdt ON d.docid = mdt.docid
WHERE
d.docid = '1'
GROUP BY
d.docid, d.doctitle, d.doctype, d.docorg, d.docdept,
s.stat, mdt.maxdate
下面是結果:
| docId | docTitle | docType | docOrg | docDept | stat | crntDocStatDtSet |
+-------+------------+---------+--------+---------+--------------+-------------------------+
| 1 | Contract 1 | 3 | 3 | 2 | Accepted | 2016-09-17 08:30:00.000 |
| 1 | Contract 1 | 3 | 3 | 2 | In Review | 2016-09-17 08:30:00.000 |
| 1 | Contract 1 | 3 | 3 | 2 | Needs Review | 2016-09-17 08:30:00.000 |
+-------+------------+---------+--------+---------+--------------+-------------------------+
好的答案,但檢查您的文檔表別名與您選擇的列 – scsimon
@scsimon謝謝我糾正了我得到的複製粘貼:) – Matt