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

SASの/このデータステートメントは正確に何をしていますか? PostgreSQLと同等ですか?

    このステートメントは、「グループ処理による」と呼ばれるものを使用しています。ステップを実行する前に、データをbtn wtn resp_jiで並べ替える必要があります。 。

    first.resp_ji ピースは、現在のbtn/wtnの組み合わせ内でresp_jiの現在の値が初めて表示されるかどうかを確認しています。同様に、last.resp_ji ピースは、resp_jiの現在の値が表示されるのが最後かどうかをチェックしています。 現在のbtn/wtnの組み合わせ内。

    それをすべてまとめてステートメント:

    if not (first.resp_ji and last.resp_ji);
    

    つまり、resp_jiの現在の値がbtn / wtnの現在の組み合わせに対して複数回発生する場合は、レコードを保持します。それ以外の場合は、レコードを破棄します。 ifの動作 そのように使用された場合のステートメントは、暗黙的にレコードを保持/破棄します。

    SQLで同等のことを行うには、次のようにします。

    1. 破棄するすべてのレコードを検索します。
    2. 元のデータセットからそれらのレコードを破棄します。

    だから...

    create table rows_to_discard as 
    select btn, wtn, resp_ji, count(*) as freq
    from mytable
    group by btn, wtn, resp_ji
    having count(*) = 1
    
    create table want as 
    select a.*
    from mytable a
    left join rows_to_discard b  on b.btn = a.btn
                                and b.wtn = a.wtn
                                and b.resp_ji = a.resp_ji
    where b.btn is null
    

    編集 :これに相当する単純なSQLはありません。サブクエリの行に番号を付け、その上にロジックを構築することで可能かもしれませんが、それは難しいでしょう。また、使用されているSQLの特定のフレーバーによっても異なる場合があります。



    1. ゼロのActiveRecordグループカウント

    2. kubernetes timescaledb statefulset:ポッドのレクリエーションで失われた変更

    3. jspとサーブレットを使用して複数のcsvファイルをmysqlデータベースにアップロードするにはどうすればよいですか?

    4. MySQLからPostgreSQLへの移行-SQLコードに表示されない機能が重要になりますか?