0

この質問は、私よりもSQLの経験が豊富な人を対象としています。

最新のエントリが直前に入力されたものと同等である場合に行数を選択するクエリ(最終的にはストアドプロシージャになりますが、これは関係ありません)を作成しています。そして、別の値を持つエントリに到達するまで、これを続けたいと思います。(説明が不十分なので、例を示します)

私のテーブルには「Product_Id」という列があり、このクエリを実行するときに、product_idを取得して、以前に入力した製品IDと比較します。同じ場合は、追加したいので、チェックを続けます。別のproduct_idに遭遇するまで、以前にproduct_idを入力しました

それが実際よりも複雑に聞こえることを願っています、そしてクエリは次のようになります

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

さて、previousはTSQLのキーワードではなく、Lastでもないことはわかっていますが、私が求めていることを実行するキーワードを知っている人を望んでいます。

  • サムのために編集

     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部分が機能し、データが希望どおりに返されます。現在、さまざまなRowNumberのProduct_IDを比較するのに問題があります。

私のWhere句が間違っている

4

2 に答える 2

2

キーワードはありません。それは素晴らしい魔法の解決策ですが、少なくとも部分的には順序が保証されていないため、存在しません(わかりました、ORDER BYがある場合にのみキーワードを使用できます...)。クエリを作成することはできますが、時間がかかるため、ここではいくつかの手順を説明し、戻ってきて、まだ少しサポートが必要かどうかを確認します。

  1. ORDER BYを計算します。そうでない場合、注文は保証されません。時間入力フィールドがある場合、それは良い選択、またはインデックスでも機能します。

  2. Row_Numberの使用方法を学びます。

  3. テーブル(Row_Numberを含む)をそれ自体と比較します。ここで、instance1.row-1=instance2.rowです。

于 2012-12-12T15:49:52.297 に答える
0

product_idがID列の場合、product_id-1だけを実行できませんか?つまり、シーケンシャルの場合は、前のコメントで説明したROW_NUMBERを使用するのと同じです。

于 2012-12-12T15:52:27.470 に答える