によってグループとの最大のタイムスタンプを選択しますMySQLのクエリは、これは私のクエリで声明
SELECT
log_timestamp,
system_name,
faction_name,
faction_allegiance,
faction_government_type,
current_state,
pending_state,
recovering_state,
influence AS influence,
transactions.transaction_id
FROM `bgs`.`faction_log`
INNER JOIN `factions` ON `factions`.`faction_id` = `faction_log`.`faction_id`
INNER JOIN `transactions` ON `transactions`.`transaction_id` = `faction_log`.`transaction_id`
INNER JOIN `system_log` ON `system_log`.`transaction_id` = `transactions`.`transaction_id`
INNER JOIN `systems` ON `systems`.`system_id` = `transactions`.`associated_system_id`
WHERE
log_timestamp BETWEEN bgs.find_closest_tick_time(date('2017-08-14')) AND bgs.find_closest_tick_time(DATE_ADD(date('2017-08-14'), INTERVAL 1 DAY)) AND
associated_system_id = 4
GROUP BY
faction_name,
log_timestamp,
system_name,
faction_allegiance,
faction_government_type,
current_state,
pending_state,
recovering_state,
influence,
transactions.transaction_id
それは正常に動作し、次のようになります。
+---------------------+-------------+-----------------+ | log_timestamp | system_name | faction_name | +---------------------+-------------+-----------------+ | 2017-08-14 11:18:46 | Nagii | Nagii Autocracy | | 2017-08-14 12:38:03 | Nagii | Nagii Autocracy | | 2017-08-14 13:40:18 | Nagii | Nagii Autocracy | | 2017-08-15 06:09:52 | Nagii | Nagii Autocracy | | 2017-08-14 11:18:46 | Nagii | Nagii Network | | 2017-08-14 12:38:03 | Nagii | Nagii Network | | 2017-08-14 13:40:18 | Nagii | Nagii Network | | 2017-08-15 06:09:52 | Nagii | Nagii Network | | 2017-08-14 11:18:46 | Nagii | Nagii Posse | | 2017-08-14 12:38:03 | Nagii | Nagii Posse | | 2017-08-14 13:40:18 | Nagii | Nagii Posse | | 2017-08-15 06:09:52 | Nagii | Nagii Posse | | 2017-08-14 11:18:46 | Nagii | Nagii Union | | 2017-08-14 12:38:03 | Nagii | Nagii Union | | 2017-08-14 13:40:18 | Nagii | Nagii Union | | 2017-08-15 06:09:52 | Nagii | Nagii Union | | 2017-08-14 11:18:46 | Nagii | Nagii United Co | | 2017-08-14 12:38:03 | Nagii | Nagii United Co | | 2017-08-14 13:40:18 | Nagii | Nagii United Co | | 2017-08-15 06:09:52 | Nagii | Nagii United Co | +---------------------+-------------+-----------------+ 20 rows in set (0.00 sec)
しかし、私は唯一の選択したいですフィールドlog_timestampの最大値を含む行。 (この場合は2017-08-15 06:09:52)。私はそのようなものを使用してみました:
HAVING transactions.log_timestamp >= max(date('2017-08-15 06:09:52'));
が、それはそのように動作しません:私は間違って何をやっている
HAVING transactions.log_timestamp >= max(log_timestamp);
?
大きなテーブルでのパフォーマンスにはどのようなものが最適ですか? –
パフォーマンスを最適にするには、インデックスでテーブルを最適化することが最善です。あなたはあなたのテーブルに 'SHOW CREATE TABLE'を投稿しておらず、' log_timestamp'テーブルがどのテーブルに属しているのかわからないので、どのインデックスが必要なのかについてはコメントできません。 –