2012-12-12 59 views
0

這個問題面向那些比我有更多SQL體驗的人。TSQL關鍵字上一個或最後一個或類似的東西

我正在寫一個查詢(最終是一個存儲過程,但這應該是無關緊要的),如果最近的條目等於剛剛輸入的那一行,我想選擇行數。我想繼續這樣做,直到它碰到具有不同價值的條目。 (解釋不清,所以我將展示的例子)

在我的表我有一列「PRODUCT_ID」,並運行此查詢時,我希望它採取的product_id,並將其與以前輸入的產品ID,如果相同我想補充一個,我希望它繼續檢查先前輸入的product_id,直到它運行到一個不同的product_id

我希望這聽起來比它更復雜的,並且查詢會看起來像

Select count(Product_ID) 
FROM dbo.myTable 
Where Product_Id = previous(Product_Id) 

現在,我知道以前不是TSQL中的關鍵字,也不是最後一個,但我希望有人知道一個關鍵字這個詞就是我所要求的。

  • 編輯山姆

    USE DbName; 
    GO 
    WITH OrderedCount as 
    (
    select ROW_NUMBER() OVER (Order by dbo.Line_Production.Run_Date DESC) as RowNumber, 
    Line_Production.Product_ID 
    From dbo.Line_Production 
    ) 
    Select RowNumber, COUNT(OrderedCount.Product_ID) as PalletCount 
    From OrderedCount 
    WHERE OrderedCount.RowNumber + 1 = RowNumber 
    and Product_ID = Product_ID 
    Group by RowNumber 
    

的OrderedCount部分工作,並返回數據傳回比較PRODUCT_ID對不同RowNumbers

我怎麼想的那樣,我現在有麻煩

我在哪裏子句有誤

+1

你的問題是非常不清楚,你可以發佈一些樣本數據和預期的結果?理想情況下,發佈「CREATE TABLE」和「INSERT」語句,其他人可以複製並粘貼以進行測試。 – Pondlife

+0

我無法真正添加插入,因爲這用於我的vb.net應用程序,並且存儲過程根據需要一次添加一行。 – Brandon

回答

2

沒有關鍵字。這將是一個不錯的魔法解決方案,但它不存在,至少部分原因是因爲沒有保證排序(好吧,只有有ORDER BY時纔有關鍵字)。我可以給你寫一個查詢,但這需要時間,所以現在我會給你幾個步驟,我會回來看看你是否還需要幫助。

  1. 找出ORDER BY,否則沒有訂單保證。如果有時間輸入字段,那麼這是一個不錯的選擇,或者一個索引,也可以。學習使用Row_Number

  2. 將表(與Row_Number)進行比較,其中instance1.row - 1 = instance2.row。

+0

啊感謝您的幫助,我將從此開始。感謝Sam! – Brandon

+0

經過深入研究這一點之後,它纔有意義。我堅持的唯一部分是3)實例部分。我如何比較實例? - 查看我的編輯問題更多 – Brandon

+1

@BrandonJ您有兩個表格引用。我不認爲實例是否適合SQL。就像'From OrderedCount o1,OrderedCount o2,WHERE o1.RowNumber + 1 = o2.RowNumber' –

0

如果product_id是標識列,你不能只是做product_id - 1嗎?換句話說,如果它是順序的,就像使用前面評論中提到的ROW_NUMBER一樣。

相關問題