Mysql統計時間段內的使用者(去重)
阿新 • • 發佈:2019-02-03
SELECT b.* FROM vip_report_vip_income b INNER JOIN (SELECT * FROM (SELECT a.* FROM vip_report_vip_income a WHERE 1 = 1 AND a.game_id = 1005 AND YEARWEEK(a.`report_date`, 1) >= YEARWEEK('2018-01-27', 1) AND YEARWEEK(a.`report_date`, 1) <= YEARWEEK('2018-02-26', 1) ORDER BY a.create_time DESC ) vb GROUP BY vip_account_id ) v ON v.id = b.id
思路:先用2個子句查出最新登入的所有使用者記錄,再聯表對賬號排重
參考:https://stackoverflow.com/questions/6572110/order-by-date-and-time-before-group-by-name-in-mysql/6572292
執行計劃:
SELECT b.* FROM vip_report_vip_income b INNER JOIN (SELECT a.*, MAX(a.create_time) AS latest FROM vip_report_vip_income a WHERE 1 = 1 AND a.game_id = 1005 AND YEARWEEK(a.`report_date`, 1) >= YEARWEEK('2018-01-27', 1) AND YEARWEEK(a.`report_date`, 1) <= YEARWEEK('2018-02-26', 1) GROUP BY vip_account_id ) v ON v.vip_account_id = b.vip_account_id AND b.create_time = v.latest;
思路:先用1個子句查出最新登入的所有使用者記錄(並排重),另外附加一個max(登入時間),再聯表,根據賬號和登入時間篩查排重
參考:https://stackoverflow.com/questions/10030787/using-order-by-and-group-by-together
執行計劃: