0

私はこれに苦労しており、ヒントが必要だと思います!

電子書籍用のdelivery_tableがあり、このテーブルには次の列があります: catalogue_number、delivery_date、status_id

product_status が '4' の列catalogue_numberからすべてのエントリを取り戻そうとしていますが、ステータスが '1' の catalogue_number のより最近の配信がある場合のみです

特定の電子書籍で表示される可能性のある例を次に示します。

+---------------+------------------+-----------+
| Delivery_Date | Catalogue_Number | Status_Id |
+---------------+------------------+-----------+
| 12/02/2012    | ABA00001         | 3         |
+---------------+------------------+-----------+
| 01/02/2012    | ABA00001         | 1         |
+---------------+------------------+-----------+
| 20/01/2012    | ABA00001         | 4         |
+---------------+------------------+-----------+
| 18/01/2012    | ABA00001         | 4         |
+---------------+------------------+-----------+
| 10/01/2012    | ABA00001         | 3         |
+---------------+------------------+-----------+
| 01/01/2012    | ABA00001         | 3         |
+---------------+------------------+-----------+

上から 2 番目の配信はステータス 1 (取り込み済み) ですが、ステータス '4' (エラー) の以前の配信があります。この場合、すべての猫番号をステータス '4' に戻したいと考えています。

ある種のネストされたクエリのシナリオになると思いますが、クエリが何をする必要があるかのロジックを考えるのに苦労しています!

よろしくお願いします。

SQL Microsoft Server 2008 を使用しています

4

1 に答える 1

2

CTE (Common Table Expression)を使用できます。これにより、ステータスが 1 の注文のサブセットが定義され、最初のクエリに結合できます。

with Order1Statuses as (
  select Catalogue_number,
         max(Delivery_date) as status1date,
  from delivery_table
  where status_id = 1
  group by catalogue_number
)
select t4.Catalogue_number
from delivery_table t4 inner join Order1Statuses t1 on 
    t4.catalogue_number = t1.catalogue_number 
    and t4.delivery_date < t1.status1date 
    and t4.status_id = 4
于 2012-05-28T14:59:28.753 に答える