2016-11-29 3 views
1

私は_id、underSubheadId、wefDate、priceを含むテーブルを持っています。 商品が作成されるか価格が編集されるたびに、この表にもエントリが作成されます。 私が欲しいのは、私は日付を入力した場合、私は日の前に、すべての個別UnderSubheadIdsの最新の価格を取得(またはエントリが見つからない場合は、その日に)最新の価格を入手するSQLite

_id underHeadId wefDate price 
1  1  2016-11-01 5 
2  2  2016-11-01 50 
3  1  2016-11-25 500 
4  3  2016-11-01 20 
5  4  2016-11-11 30 
6  5  2016-11-01 40 
7  3  2016-11-20 25 
8  5  2016-11-15 52 

は私が日付として2016年11月20日を入力した場合であります私は、SQL Server内の行番号の機能を使用して結果を達成しているが、私はそのような機能を持っていないsqliteは、この結果をしたい

1 5 
2 50 
3 25 
4 30 
5 52 

を取得する必要があります。 また、2016-10-25(エントリがない)のような日付が入力された場合は、最初の価格が欲しいです。 1の場合と同様に、価格は最寄りの5で、1番目のエントリは2016-11-01です。

これは正常に動作しているSQL SERVERのクエリです。しかし、私はそれがROW_NUMBER関数を持たないSqliteのために必要です。

select underSubHeadId,price from(
    select underSubHeadId,price, ROW_NUMBER() OVER (Partition By underSubHeadId order by wefDate desc) rn from rates 
    where wefDate<='2016-11-19') newTable 
where newTable.rn=1 

これは少しトリッキーですが、ここでは一つの方法であるあなた

答えて

1

ありがとう:

select t.* 
from t 
where t.wefDate = (select max(t2.wefDate) 
        from t t2 
        where t2.underSubHeadId = t.underSubHeadId and 
         t2.wefdate <= '2016-11-20' 
       ); 
+0

私はこのクエリを実行しましたが、Select *からtと同じ結果が得られました。 すべての行が戻されます。 :(@Gordon Linoff 見てくださいhttp://imgur.com/a/OeMhF –

+0

@RishiChandak ...。相関句が正しいと確信していますか? –

+0

わかりませんが、提案したクエリはすべての行を返しました –

0

選択underHeadId、最大(価格) トンから wefDate < =「2016- 11-20 " by underHead;

+0

tは日付の最大価格ですが、その日付からの最後の価格入力です。 –

+0

SQLを理解しているかどうかは疑問です。 –

+0

あなたが知っているのは、あなたのこの質問を見たときに私があなたについて感じたことです。 このクエリは、その日付の前にUnderHeadIdの最大価格を返します。しかし、これは私が欲しい値ではなく、その日より前のUnderHeadの最終更新値です。 –

関連する問題