我想創建一個連接2表和連接表的第一個元素。SQL Server SELECT首先
我的表是這樣的:
產品
id
name
銷售
idProduct
prices
date
我想有最後的銷售價格爲每臺產品,但功能FIRST
沒有按在SQL Server中不存在。
有人有想法嗎?
感謝,
我想創建一個連接2表和連接表的第一個元素。SQL Server SELECT首先
我的表是這樣的:
產品
id
name
銷售
idProduct
prices
date
我想有最後的銷售價格爲每臺產品,但功能FIRST
沒有按在SQL Server中不存在。
有人有想法嗎?
感謝,
您可以使用排序功能像ROW_NUMBER
:
WITH CTE AS(
SELECT id, name, idProduct, prices, date,
RN = ROW_NUMBER() OVER (PARTITION BY idProduct ORDER BY date DESC)
FROM dbo.Product p INNER JOIN dbo.Sales s on p.id = s.idProduct
)
SELECT * FROM CTE WHERE RN = 1
Ranking Functions (Transact-SQL)
的CTE
類似於一個子查詢,但更多的可讀性和可維護性一個common-table-expression。
巨大的桌子上它仍然會很慢 – makciook
@makciook:什麼是巨大的桌子(什麼是_huge_)?如果你自己加入他們,CTE對「巨大」的桌子很慢,你應該儘可能避免這種情況。但是,上面的查詢應該不會因爲適當的索引而變慢。 –
感謝的 我用CTE的視圖,它的工作 – user2064192
如果它的SQL服務器,只需使用:
SELECT TOP 1 *
FROM Product p
JOIN Sales s ON p.id = s.idProduct
ORDER BY s.Date DESC
這是**不**會顯示每個產品的第一個(最近)銷售 - 它將只顯示一行 - 最近的整體銷售。 –
您必須在發佈其他人之前運行代碼 –
這可能不適用於你的SQL版本,但SQL 2012有[FIRST_VALUE函數(http://msdn.microsoft.com/en-我們/圖書館/ hh213018.aspx),似乎只是你想要的。認爲這可能對某人有幫助。 – GolfWolf