2つの列として週番号と年を含むテーブルがあります。週番号は各年で0から52になりますが、現在の問題は、現在の更新値に基づいて以前の更新を週番号と年として見つけなければならないことです。更新。 2017年の52週目または2018年の15週目である可能性があります。
私はこれを試しました:
SELECT TOP(1) WEEKNUM AS WEEK,YEARNUM AS YEAR
FROM UPDATE_TABLE
WHERE (WEEKNUM < 22 and YEARNUM = 2019) or (YEARNUM < 2019 )
ORDER BY WEEKNUM DESC,YEARNUM DESC
2018年未満が選択されているため、OR部分で失敗します。
こちらが表です
┌─────────┬─────────┐
│ weeknum │ yearnum │
├─────────┼─────────┤
│ 28 │ 2018 │
│ 19 │ 2018 │
│ 17 │ 2018 │
│ 21 │ 2018 │
│ 21 │ 2017 │
│ 30 │ 2017 │
│ 31 │ 2017 │
│ 48 │ 2017 │
│ 49 │ 2017 │
│ 50 │ 2017 │
│ 51 │ 2017 │
│ 22 │ 2019 │
└─────────┴─────────┘
上記のクエリはこの結果を返します
WEEK YEAR
51 2017
私が期待しているのは
WEEK YEAR
28 2018
これはシステムの最後の更新です。同様に、2018年17月を現在の更新として検討する場合、51 2017年を出力として取得する必要があります。
ヒント:週番号は現在の更新週よりも小さいか、または大きい可能性があり、年は現在の年または現在の更新年の前の年である可能性があります。
ORDER
WEEKNUM + (YEARNUM * 52)
でフィルタリング 何らかの種類のAND/OR
を適用しようとする代わりに、単一の派生列として 論理。ROW_NUMBER()
も使用できます 基数列を作成して、前の行を簡単に取得できるようにします。または、LAG()
の使用を検討することもできます 関数。
関連記事
- TwilioFlexの使用時に電話番号を取得する
- AggregationMongoDBを使用してドキュメントの数をカウントします
- Astroidを使用してifステートメントで条件の数を取得するにはどうすればよいですか?
- forループを使用するだけで、リストから欠落している番号を見つける必要があります。理解できると思ったら、コードを参照してください。
- useStateフックを使用するときに以前の状態でifelse ifをリファクタリングするにはどうすればよいですか?
- IFの使用中にVBAで数値を抽出する:リフレッシュ
- findを使用して行番号を特定する
- 同じストリームにStreamBuilderを使用し、それがFirestoreからの読み取り数に与える影響
- 値上げに使用したのと同じ数を使用して価格を下げるにはどうすればよいですか?
- 文字列を使用して別のクラスから2つの数値を計算する
あなたはただあなたの
ORDER BY
を得た 句がまちまち。最初に年で、次に週で注文します。これにより、2019W22の前の最後の更新週になります。