簡體   English   中英

mysql按日期時間選擇一列中的所有唯一行,另一列中的所有最大行

[英]mysql select all unique rows in one column and all max rows in another column by datetime

我需要為每個table_id獲取最新的(按date_time) unique player_id

表:

buyin_id   player_id   table_id       date_time
---------|-----------|----------|--------------------|
    1    |    10     |    21    | 2015-01-26 00:00:01
    2    |    11     |    21    | 2015-01-26 00:00:02
    3    |    12     |    21    | 2015-01-26 00:00:03
    4    |    10     |    21    | 2015-01-26 00:00:04
    5    |    11     |    21    | 2015-01-26 00:00:05
    6    |    12     |    22    | 2015-01-26 00:00:06
    7    |    13     |    22    | 2015-01-26 00:00:07
    8    |    13     |    22    | 2015-01-26 00:00:08

所需結果:

buyin_id   player_id   table_id       date_time
---------|-----------|----------|--------------------|
    3    |    12     |    21    | 2015-01-26 00:00:03
    4    |    10     |    21    | 2015-01-26 00:00:04
    5    |    11     |    21    | 2015-01-26 00:00:05
    6    |    12     |    22    | 2015-01-26 00:00:06
    8    |    13     |    22    | 2015-01-26 00:00:08

我嘗試過這樣的事情,每個table_id只返回1行而不是1行

SELECT pb.buyin_id, pb.player_id, pb.buyin, pb.cashout, pb.cashout_error, pb.date_time
FROM poker_buyin AS pb
INNER JOIN (SELECT player_id, MAX(date_time) AS MaxDateTime
FROM poker_buyin GROUP BY player_id) groupedpb 
ON pb.player_id = groupedpb.player_id 
AND pb.date_time = groupedpb.MaxDateTime
WHERE pb.player_id = '$player_id'";

您提到的查詢將查找每個玩家ID的最新記錄。 然后,您對其進行過濾以找到一名球員,那么您將獲得一行。

如果要查找每個球員和桌子的最新記錄,則內部查詢需要這樣:

            SELECT  MAX(buyin_id) buyin_id
              FROM  poker_buyin
             GROUP  BY player_id, table_id

這將從表中獲取代表最新播放器/表組合的行ID。

然后使用它從表中提取記錄,例如( http://sqlfiddle.com/#!2/be68b7/2/0

SELECT whatever_columns
  FROM poker_buyin
 WHERE buyin_id IN
       (
            SELECT  MAX(buyin_id) buyin_id
              FROM  poker_buyin
             GROUP  BY player_id, table_id
       )
 WHERE player_id = '$player_id'
 ORDER BY player_id, table_id

該查詢中有一個小技巧:buyin_id值不斷上升,因此這是為每個組合選擇最新記錄的好方法。

如果在結果列中不需要buyin_id ,則很簡單:

SELECT DISTINCT player_id, table_id, max(date_time) as dt 
FROM `poker_buyin ` 
GROUP BY player_id, table_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM