2012-04-25 13 views
0

の範囲:私は余裕のレポートを作成するために、請求書のレコードに関連付けられているコストのレコードを検索したいは、日付と時刻で参加私は2つのテーブル持っ

  1. 請求書
  2. コスト

を。

たとえば、請求書テーブルから1004を注文すると、そのファイルから日付と時刻を取得し、その日付と時刻に基づいてコストを検索したいと思います。

順番1004が171523.

の日4月15日のコストテーブルのレコードをリンクすることになる171543の4月15日の時間を持っており、時間、私は出力を見たい方法の詳細については、以下の画像を参照してください。

事前のおかげで

請求書ファイル

Order1 Item1 Sales1  Date1 Time1 
1001  | A1001 | 10.00  |04/15 |151025 
1002  | A1001 | 12.00  |04/15 |151112 
1003  | A1001 | 11.00  |04/15 |171235 
1004  | A1001 | 14.00  |04/15 |171543 
1005  | A1001 | 13.50  |04/15 |171855 

コストファイル

Item2 Cost2 Date2 Time2 
A1001 | 3.50 |04/14 |171255 
A1001 | 4.20 |04/15 |151233 
A1001 | 2.50 |04/15 |171523 
A1001 | 4.00 |04/15 |171623 

出力レイアウト - マージンレポート

Order |Item |Sales  |Cost |Margin 
1001 |A1001 |10.00  |3.50 | 6.50 
1002 |A1001 |12.00  |3.50 | 8.50 
1003 |A1001 |11.00  |2.50 | 8.50 
1004 |A1001 |14.00  |2.50 | 11.50 
1005 |A1001 |13.50  |4.00 | 9.50 
+1

アウトそれをチェックすることができますどのデータベースシステムで作業しているか教えてください。 – squillman

+0

揮発性の価格! 60秒で2.50〜4.00 ... –

+0

時間と日付を分けることで、DATE + TIME(別名TIMESTAMP)列を持つ場合よりも、このようなクエリ操作をより奇妙に複雑にしています。 –

答えて

3

これは

select yourFields 
    from invoice 
     inner join cost on cost.item2 = invoice.item1 
         and cost.date2 = invoice.date1 
         and cost.time2 = (select max(cost_inner.time2) 
              from cost as cost_inner 
             where cost_inner.item2 = invoice.item1 
              and cost_inner.date2 = invoice.date1 
              and cost_inner.time2 <= invoice.time1) 

を動作するはずですが、より複雑なクエリで参加し、内側を回避する方法があり、あなたはhere

+0

一般的な構造は正しいですが、私は答えがMAX(cost.time2)は、請求書のtime1の前に来ることに基づいて期待します。スキーマは、日付と時間の分離によって複雑になります。その種のものは、通常、間違いですが、あなたのせいではありません。 –

+0

@JonathanLefflerそうです。一定。次回は自分で編集してください! –