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

テーブルデザイン+SQLの質問

    なぜ合成キーが必要なのかわからないので、代わりにこのテーブルを使用します:

    CREATE TABLE foodbar (
      user_id     INT NOT NULL
    , created_at  date not null
    , weight      double not null
    , PRIMARY KEY (user_id, created_at)
    );
    
    SELECT curr.user_id, curr.weight - prev.weight
    FROM foodbar curr, foodbar prev
    WHERE curr.user_id = prev.user_id
      AND curr.created_at = CURRENT_DATE
      AND prev.created_at = CURRENT_DATE - INTERVAL '7 days'
    ;
    

    日付の算術構文はおそらく間違っていますが、あなたは考えを理解します

    上記を参照して、ORDER BY curr.weight - prev.weight DESCを追加してください およびLIMIT N

    最後の2つの質問については、推測しないで、実行計画を調べてください。 (postgresqlにはEXPLAIN ANALYZEがあります 、mysqlについてはわかりません)おそらく、WHEREに参加する列にインデックスを付ける必要があることに気付くでしょう。 およびJOIN 、結果セットを形成するものではありません。



    1. MySQLテーブルのランクを更新します

    2. SQLiteをJSONに変換する

    3. Galera Cluster Cloudオファリングの比較:パート3 Microsoft Azure

    4. どのMySQLフォーク/バージョンを選択しますか?