2016-12-29 31 views
0

Data SampleSQL查詢,基於由項目和客戶

記錄從連接的數據樣本,我需要爲了回報最新交易,該帳戶和特定的代碼來創建一個SQL查詢最後日期返回數據。即查詢應返回如下;

的60.00目前爲止,股價錄得帳戶S494和對24/10/2016代碼5044。這將確定最後一位客戶何時購買了該物品以及以何種價格購買。

+1

您不應該將'DATE'值存儲爲'VARCHAR' ...將它們存儲爲正確的類型 - 它使得這些類型的查詢不是皇室的痛苦。 – Siyual

回答

-1

您可以使用RANK()進行分區,並選擇您所需要的範圍(在這種情況下,你需要的頂部1,那麼,RANK()是1 - 但你可以進行相應的修改where子句)。

您可以使用ROW_NUMBER()來代替,但您可能有多個記錄,其中trandate是相同的,所以您需要兩個記錄,其中RANK()是1(使用示例中的數據 - 如果這永遠不會是大小寫使用ROW_NUMBER)。

SELECT [code], [account], [price], [trandate] 
FROM 
(SELECT RANK() OVER (PARTITION BY [account], [code] ORDER BY [trandate] DESC) [rank], [code], [account], [price], [trandate] FROM [#trans]) [d] 
WHERE [d].[rank] = 1 
+0

謝謝傑米的幫助。乍一看,查詢返回所需的結果,但我無法將查詢保存爲SQL視圖供將來使用。是否有可能將這些保存在SQL視圖中? – User0983

+0

你應該可以將它保存爲一個視圖,CREATE VIEW [dbo]。[View] AS 應該爲你做這個沒問題。如果您需要更多幫助,請隨時提出其他問題並將其鏈接到此處。 –

+0

嗨傑米,視圖創建成功,如上所示。非常感謝您的幫助,祝您新年快樂! – User0983

0
SELECT code, 
    account, 
    price, 
    trandate 
FROM 
    (SELECT t.*, 
    row_number() over (partition BY account, code order by convert(datetime,trandate,103) DESC) rn 
    FROM your_table 
) t 
WHERE rn = 1; 
-1
select TOP 1 CODE,ACCOUNT,PRICE,TRANSDATE 
FROM TABLE 
ORDER BY CAST(TRANSDATE AS DATE) DESC 
+0

感謝您的回覆,但是我的真實表中的這個查詢只返回了此客戶剛剛購買的最後一件產品。我的查詢是針對客戶購買的每件商品,購買的最後日期和價格。謝謝 – User0983

+0

您能否請您在答案中添加更多的上下文。僅有代碼或僅鏈接的答案很難理解。如果您可以在帖子中添加更多信息,它可以幫助提問者和未來的讀者。 – RBT