2013-07-11 104 views
2

我想創建一個連接2表和連接表的第一個元素。SQL Server SELECT首先

我的表是這樣的:

產品

id 
name 

銷售

idProduct 
prices 
date 

我想有最後的銷售價格爲每臺產品,但功能FIRST沒有按在SQL Server中不存在。

有人有想法嗎?

感謝,

+1

這可能不適用於你的SQL版本,但SQL 2012有[FIRST_VALUE函數(http://msdn.microsoft.com/en-我們/圖書館/ hh213018.aspx),似乎只是你想要的。認爲這可能對某人有幫助。 – GolfWolf

回答

6

您可以使用排序功能像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

+0

巨大的桌子上它仍然會很慢 – makciook

+3

@makciook:什麼是巨大的桌子(什麼是_huge_)?如果你自己加入他們,CTE對「巨大」的桌子很慢,你應該儘可能避免這種情況。但是,上面的查詢應該不會因爲適當的索引而變慢。 –

+0

感謝的 我用CTE的視圖,它的工作 – user2064192

-2

如果它的SQL服務器,只需使用:

SELECT TOP 1 * 
FROM Product p 
JOIN Sales s ON p.id = s.idProduct 
ORDER BY s.Date DESC 
+1

這是**不**會顯示每個產品的第一個(最近)銷售 - 它將只顯示一行 - 最近的整體銷售。 –

+0

您必須在發佈其他人之前運行代碼 –