簡體   English   中英

如何編寫此SQL查詢?

[英]How do I write this SQL query?

我有一個表,該表記錄了鏈接到父項的子項的歷史記錄,分為兩列:

  • ParentId
  • ChildId

一些示例數據如下所示:

ParentId-ChildId
001-001
001-001
001-001
001-002
001-002
001-002
001-003
001-003
001-003
001-003
001-004
001-004
001-005
001-005
001-005
001-005

我需要為給定的ParentId選擇所有值為ChildId最高的行。 因此,在上面的示例中,給定輸入參數'@parentId = 001',我需要查詢返回以下行:

001-005
001-005
001-005
001-005

謝謝你的幫助!

要做到這一點:

SELECT * FROM MyTable
WHERE parentId = '001'
AND childId = (SELECT MAX(childId) FROM MyTable WHERE parentId = '001')

這個怎么樣?

SELECT ParentID, MAX(ChildID) AS ChildID
FROM TableName
GROUP BY ParentID

更新以編輯錯過的要求以返回所有行:

測試數據

-- Populate Test Data
CREATE TABLE #table (
  ParentID varchar(3) NOT NULL, 
  ChildID varchar(3) NOT NULL
)

INSERT INTO #table VALUES ('001','001')
INSERT INTO #table VALUES ('001','001')
INSERT INTO #table VALUES ('001','001')
INSERT INTO #table VALUES ('001','002')
INSERT INTO #table VALUES ('001','002')
INSERT INTO #table VALUES ('001','002')
INSERT INTO #table VALUES ('001','003')
INSERT INTO #table VALUES ('001','003')
INSERT INTO #table VALUES ('001','003')
INSERT INTO #table VALUES ('001','003')
INSERT INTO #table VALUES ('001','004')
INSERT INTO #table VALUES ('001','004')
INSERT INTO #table VALUES ('001','005')
INSERT INTO #table VALUES ('001','005')
INSERT INTO #table VALUES ('001','005')
INSERT INTO #table VALUES ('001','005')

結果

-- Return Results
DECLARE @ParentID varchar(8)
SET @ParentID = '001'

SELECT T1.ParentID, T1.ChildID
FROM #table T1
JOIN (
    SELECT Q1.ParentID, MAX(Q1.ChildID) AS ChildID
    FROM #table Q1
    GROUP BY ParentID
) ParentChildMax ON ParentChildMax.ParentID = T1.ParentID AND ParentChildMax.ChildID = T1.ChildID
WHERE T1.ParentID = @ParentID

注意:使用WHERE子句中的以下語句,此解決方案的性能與接受的解決方案(根據SQL Server Profiler)相同。 但是我更喜歡我的解決方案,因為它對我來說似乎更干凈,可以輕松擴展以包含其他ParentID。 (例如,出於報告目的。)

(SELECT MAX(childId) FROM #table WHERE parentId = @ParentID)
SELECT *
FROM TABLENAME
WHERE parentId = '001'
AND childid = (select MAX (ChildId) 
               from TABLENAME
               where parentId = '001')

選擇 *
FROM table_name
在哪里ParentId = @parentId
GROUP BY ParentId
擁有ChildId = MAX(ChildId)

為了照顧表中的多個父母,以下內容應有所幫助

select parentId, max(childid) as ChildId
from <table_name>
group by parentId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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