1

アイテム番号、価格発効日、および価格で構成されるアイテム価格ファイルがあります。年初から値上げを予定しております。私がやりたいことは、発効日が後の価格レコードを今すぐ追加し、現在の日付に基づいて現在の価格を選択することです。IE 現在の日付は 08/03/11 です。ITEM1 01/01/09 レコードを取得します。

1. ITEM1    01/01/01    100.00
2. ITEM1    01/01/05    150.00
3. ITEM1    01/01/09    200.00
4. ITEM1    01/01/12    250.00

年の最初が 01/01/12 になったら、01/01/12 レコードを選択します。

正しいレコードではなく、最初または最後のレコードをプルするため、MIN または MAX 関数を使用することはできません。

どんなアイデアでも大歓迎です。

4

6 に答える 6

4

これを試して:

select * from tb 
join (
        select tb.item, 
        MAX(tb.effDate) effDate
        from tb
        where tb.effDate <= currentDate
        group by tb.item
    ) tmp 
    on tb.item = tmp.item
    and tb.effDate = tmp.effDate

サブクエリは正しい行を識別し、メイン クエリはその行を再度フェッチして価格を取得します。

于 2011-08-03T20:30:04.303 に答える
0

SELECT * FROM テーブル WHERE 日付 >= '01/01/09'

于 2011-08-03T20:20:06.217 に答える
0

これを試して:

SELECT item_number, MAX(price_effective_date)
  FROM items_table
WHERE price_effective_date <  current_date 
    GROUP BY item_number
于 2011-08-03T20:20:31.210 に答える
0

VB.NET を使用している場合、これは非常に簡単です。フィールドが単一の ' ' (スペース) で区切られているようです。これにより、次のようなものが得られます。

Dim Record As String = "ITEM1 01/01/01 100.00 ITEM1 01/01/05 150.00 ITEM1 01/01/09 200.00 ITEM1 01/01/12 250.00"
Dim Fields() As String = Record.Split(" ")

Dim LastItemNo As String = Fields(Ubound(Fields) - 2)
Dim LastDate As Date = Date.Parse(Fields(Ubound(Fields) - ))
Dim LastPrice As Single = Val(Fields(Ubound(Fields)))

Debug.WriteLine("Item: " & LastItemNo & "; Date: " & Format(LastDate, "MM-dd-yyyy") & "; $" & Math.Round(LastPrice, 2))

この場合、次のように出力されます。日付: 2012 年 1 月 1 日。$250.00

これがあなたが探していたものであることを願っています。

于 2011-08-03T20:22:42.227 に答える
0

日付の降順で (最新のレコードが「一番上」になるように)WHERE並べ替え、関心のある日付より後の日付を除外するために使用します。LIMIT 句 (mySQL の場合) は、結果セットを 1 行だけにします。したがって、クエリは次のようになります

SELECT *
  FROM tab
  WHERE(Number = ITEM1)AND(Date <= CURRENT_DATE)
ORDER BY Date DESC
FETCH FIRST 1 ROW ONLY
于 2011-08-03T20:18:45.327 に答える
0

SQLだけの場合は、試してみる必要があります

SELECT [columname price] FROM [tablename] WHERE EXTRACT(YEAR FROM CURDATE()) = EXTRACT(YEAR FROM [columname date] ) limit 1

[columname]データを保持する列ウィッチの名前に置き換えます

[tablename]データを保持するテーブル ウィッチの名前に置き換えます

私はそれがうまくいくはずだと信じています。

于 2011-08-03T20:23:46.803 に答える