我有一個表TableA
,數據就會像下面:如何獲得最近插入的每個值的記錄有效
PostID PostComments PostTransDate UserID
-----------------------------------------------------------------
10000 VRDFHFGFTR 2013-10-26 21:08:19.817 43434
10000 GFDGDFSDFF 2013-10-26 21:12:32.323 67576
10000 HGFHGFBNBF 2013-10-26 21:43:43.545 3232
10000 JNFNGHFGHG 2013-10-26 21:45:46.656 768
10000 MJHJNGJHGH 2013-10-26 21:56:32.767 9897
10001 XCVGFDGDFG 2013-10-26 22:54:54.868 3424
10001 YTUGFGHHGF 2013-10-26 13:32:54.132 12313
10001 HGFHFGHGHF 2013-10-26 18:08:32.878 6565
在這裏,我想獲得的最大價值PostTransDate
每個PostID
的UserID,PostComments
。
輸出:
--------------------------------------------------
PostID PostComments PostTransDate UserID
-----------------------------------------------------------------
10000 MJHJNGJHGH 2013-10-26 21:56:32.767 9897
10001 XCVGFDGDFG 2013-10-26 22:54:54.868 3424
我已經獲得此查詢。
查詢1:
SELECT TT.PostID,TT.PostComments,TT.UserID, TT.PostTransDate
FROM tableA TT WITH(NOLOCK)
INNER JOIN
(
SELECT PostID,MAX(PostTransDate) PostTransDate
FROM tableA T WITH(NOLOCK)
GROUP BY PostID
) T ON T.PostID = TT.PostID AND T.PostTransDate = TT.PostTransDate
查詢2:
SELECT *
FROM
(
SELECT PostID,UserID,PostTransDate,T.PostComments,
ROW_NUMBER() OVER(PARTITION BY PostID ORDER BY PostTransDate DESC) RNO
FROM tableA T
) N WHERE RNO = 1
我不能運行這些查詢生產,因爲這些都是非常沉重的。如果任何人有比這更簡化的查詢,請發佈。
表上有什麼索引?有聚集索引嗎?主鍵?到目前爲止,查詢2相對於此頁面上的所有內容都應該是非常高效的,但它取決於可用的索引。很可能這很慢,不是因爲您使用的查詢,而是因爲它正在執行表掃描,因爲沒有可用的索引是有效的。 –
另外,你想怎麼處理關係?兩個人可以同時發表評論到同一篇文章。 –
此表中沒有任何主鍵。我們在PostID列上只有非唯一的集羣索引。以及UserID n其他列上的非唯一非集羣索引。 和incies of Ties.its好的,如果我得到任何record.Per PostID,我應該只有一個UserID,PostComments。 由於此表包含3.2億條記錄。我的團隊告訴我要進一步優化它。 –