2011-06-21 9 views
1

私はSQLiteの3.7.4を使用して含まれ、テーブル持っています:私は与えられた受注日のために、以前はそこにある、「受注日」&「ID」を選択できるようにしたいと思い先週の顧客IDに以前の注文があるかどうかを問い合わせる:How To?

TABLE: 'Orders' 
ID  OrderDate 
1234 2011-06-01 00:00:00 
1245 2011-06-04 00:00:00 
1234 2011-06-05 00:00:00 

を最後の1週間で注文します。

したがって、上記データのため:最初のレコードID 1234 2011-06-01 00:00:00注文 を有しているが、どれも を有していない

  • は、前 - ように選択されていません。

  • 次のレコードID 1245

    は、2011年6月4日00:00:00順 を持っていますが、 週間でどれも前に2011年6月4日、そうではない は、選択しました。 2011年6月5日00:00:00行わ

  • 第三レコードID 1234の順序は2011-06-01に以前 秩序を持っているので、このレコード が選択されています。私はちょうど約日付の違いをstrftime('%s',OrderDate)を使用して周り私の頭を取得するために管理しているが、受注日レコードのyyyy-mm-dd一部を取って、振り返ってみることにより、クエリを実行する方法を考え出すことはできません「-7日」に

その範囲内に1つ以上のレコードがあるかどうかを確認します。

どれguideanceは

+0

あなたの説明から、私は「ID」は注文ではなく顧客、クライアント、または他のエンティティを指していることを知ります。 Ordersテーブルに 'ID'カラムがある場合、それはOrder IDでなければなりません。 CustomerIDなどを使用して差別化することができます(とにかく両方を含める必要があります)。 – Alex

答えて

1

はない特定の私は理解し:)感謝が、これはサンプルデータを考えると、あなたが探しているの出力が得られます。

sqlite> select o1.id, o1.orderdate from orders o1 
    ...> inner join orders o2 on (o1.id = o2.id 
    ...> and o2.orderdate >= date(o1.orderdate, '-7 day') 
    ...> and o2.orderdate < o1.orderdate); 
1234|2011-06-05 

おそらくSQLite Date and Time Functionsをご覧ください。

+0

エントリには時、分、秒が00に設定されているため、同じ日のレコードも受け入れられると思われます。したがって、 '' inner join ... on o1.rowid <> o2.rowidとo1.id = o2.idとo2.orderdate BETWEEN ... AND ...) ' – Benoit

+0

@Benoit:そうかもしれない。私は注文の時間を記録する会計システムを見たことはありませんでしたが、すべての時間コンポーネントはゼロです。 (それはそうではありません*観察はそれほど意味がありませんOPがコメントします) –

+0

多くのありがとうございます。私はHH:mm:ss zero'dを残しましたが、実際のデータにはこれも入力されています。クエリは私にリストを与えます - 私はそれを検証しますが、それは正しく見えます。優れた。どうもありがとう :) – Mike

関連する問題