sql >> データベース >  >> RDS >> PostgreSQL

日付のシーケンスに基づくランク

    SELECT heading, thedate
          ,row_number() OVER (PARTITION BY grp ORDER BY thedate) AS rn
    FROM  (
       SELECT *, thedate - (row_number() OVER (ORDER BY thedate))::int AS grp
       FROM   demo
       ) sub;
    

    「ランク」について話している間、ウィンドウ関数の結果が必要なようです row_number()

    1. 連続する日のグループを形成します(grpの同じ日付 )サブクエリsub
    2. 別のrow_number()で行に番号を付ける 今回はgrpで分割された呼び出し 。

    ウィンドウ関数はネストできないため、ここでは1つのサブクエリが最低限です。

    SQLフィドル。

    矛盾するサンプルデータの2番目のバージョンを使用したことに注意してください。結果は、@muの提案 のようになります。 彼のコメントで。
    また、重複する日付がないと仮定します。この場合、最初に集計する必要があります。



    1. バイナリとしてのUUIDの挿入と選択(16)

    2. MySQLで大文字をチェックする方法は?

    3. MySQL:テーブルを追加の列を持つ別のテーブルにコピーします

    4. AnormでのアトミックMySQLトランザクション