ホームページ >データベース >mysql チュートリアル >MySQL で各メンバーの最新の出席状況を取得するにはどうすればよいですか?

MySQL で各メンバーの最新の出席状況を取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 04:35:28595ブラウズ

How to Retrieve the Most Recent Attendance for Each Member in MySQL?

MySQL で Group By を使用して最新の値のみを選択する

テーブルから各メンバーの最新の出席状況を取得しようとすると、単純な GROUP BY クエリを使用して最後の出席者ではなく最初の出席者を取得する状況が発生する可能性があります。この問題を解決するには、いくつかの方法があります。

サブクエリの使用

サブクエリを使用して各メンバーの最大タイムスタンプを検索し、元のテーブルに結合できます。そのタイムスタンプに基づいて、対応する出席状況を取得します。

<code class="sql">SELECT 
  id_branch_channel, id_member, attendance, timestamp, id_member
FROM view_event_attendance AS t1
WHERE id_event = 782
  AND timestamp = (
    SELECT 
      MAX(timestamp)
    FROM view_event_attendance AS t2 
    WHERE t1.id_member = t2.id_member 
      AND t1.id_event = t2.id_event 
    GROUP BY id_event, id_member
  )
OR timestamp IS NULL
GROUP BY id_event, id_member;</code>

派生テーブルの使用

タイムスタンプによって行を降順に並べる派生テーブルを作成できます。次に、そのテーブルを GROUP BY クエリのソースとして使用します。

<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member 
FROM (
  SELECT 
    id_branch_channel, id_member, attendance, timestamp, id_member
  FROM view_event_attendance 
  WHERE id_event = 782 
  ORDER BY timestamp DESC
) AS sorted
GROUP BY id_event, id_member;</code>

ウィンドウ関数の使用

ウィンドウ関数を使用して、全体の最大値を見つけることができます。各メンバーの行を作成し、その最大値を使用して行をフィルタリングします。

<code class="sql">SELECT 
  id_branch_channel, id_member, attendance, timestamp, id_member
FROM (
  SELECT 
    id_branch_channel, id_member, attendance, timestamp, id_member,
    MAX(timestamp) OVER (PARTITION BY id_event, id_member) AS max_timestamp
  FROM view_event_attendance 
  WHERE id_event = 782
) AS subquery
WHERE timestamp = max_timestamp
GROUP BY id_event, id_member;</code>

文字列連結トリックの使用

このアプローチには、タイムスタンプと出席を連結することが含まれます。単一の文字列を使用し、MAX() 関数を使用して最大の文字列を検索します。最大文字列から出席者を抽出することで、最新の出席者を効果的に取得できます。

<code class="sql">SELECT 
  id_branch_channel, id_member, 
  SUBSTR(MAX(CONCAT(FROM_UNIXTIME(timestamp), attendance)), 20) AS attendance, timestamp, id_member
FROM view_event_attendance 
WHERE id_event = 782 
GROUP BY id_event, id_member;</code>

特定の状況に最適なアプローチは、データベースのパフォーマンス特性とデータセットのサイズによって異なります。

以上がMySQL で各メンバーの最新の出席状況を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。