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

IDと最新の日時によるMySQLグループ

    以下で必要なことを達成できると思います。これらの操作はいわゆる「グループ単位の最大値」です。

    オプション1

    これは最も理解しやすい方法で、サブクエリは最大のTIDを返します。 max以降のすべてのユーザー Group Byと一緒に使用されます 他のクエリを実行して、これらのIDのすべてのデータを取得するよりも。

     Select TID, TData, TUserID, TViewedAt
     From Test 
     Where TID In(
        Select Max(TID)
        From Test
        Group By TUserID
    )
    

    オプション2

    理解するのは少し複雑ですが、おそらくより効率的です。これは、t1.TViewedAtの場合に基づいて機能します。 は最大値であり、t2.TViewedAtはありません。 値が大きくなると、t2行の値はNULLになります 。

    SELECT t1.TID, t1.TData, t1.TUserID, t1.TViewedAt
    FROM Test t1
    LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAt
    WHERE t2.TUserID IS NULL;
    

    結果

    TID TData   TUserID   TViewedAt
    4   test3   123       2012-10-05 00:00:00.000
    5   test2   213       2012-10-03 00:00:00.000
    


    1. MariaDBの日付から年を返す4つの関数

    2. MySQL/MariaDBデータベースの自動インクリメント値を変更する方法

    3. Ubuntu18.04にPython用のmysqlclientをインストール中にエラーが発生しました

    4. JavaでのOracleネストテーブルへの挿入