|
Выбрать последнюю запись по одному полю
#39670743
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Имеется таблица:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
CREATE TABLE IF NOT EXISTS `visit` (
`id` BIGINT(6) NOT NULL AUTO_INCREMENT,
`siteId` BIGINT(6) NOT NULL,
`clientId` BIGINT(6) NULL,
`guest` TINYINT(1) NULL DEFAULT 1,
`ip` LONGTEXT NULL,
`os` LONGTEXT NULL,
`screen` LONGTEXT NULL,
`page` LONGTEXT NULL,
`referer` LONGTEXT NULL,
`device` LONGTEXT NULL,
`location` LONGTEXT NULL,
`created` TIMESTAMP(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`, `siteId`),
INDEX `fk_visit_site1_idx` (`siteId` ASC),
CONSTRAINT `fk_visit_site1`
FOREIGN KEY (`siteId`)
REFERENCES `site` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
в неё докидываются записи но эти записи могут иметь одинаковые поля siteId и clientId.
Мне нужно выбрать самые последние записи по каждому cientId. siteId мы задаём сами.
Я сделал такое:
1.
SELECT v.id AS id, v.siteId, v.clientId, v.guest, MAX(v.ip) AS ip, MAX(v.os) AS os, MAX(v.screen) AS screen, MAX(v.device) AS device, MAX(v.location) AS location, MAX(v.date) AS date, MAX(v.time) AS time, MAX(v.created) AS created FROM visit AS v WHERE siteId = ? GROUP BY v.id, v.siteId, v.clientId ORDER BY MAX(v.created) DESC;
Но происходят дублирования, да и MAX функция как-то не так выбирает.
Подскажите пожалуйста поправленный SQL запрос.
P.S. нет, я не прошу сделать за меня, а поправить то что есть.
P.S.S может есть резон вообще сделать две таблицы?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
CREATE TABLE IF NOT EXISTS `visit` (
`id` BIGINT(6) NOT NULL AUTO_INCREMENT,
`siteId` BIGINT(6) NOT NULL,
`clientId` BIGINT(6) NULL,
`guest` TINYINT(1) NULL DEFAULT 1,
`created` TIMESTAMP(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`, `siteId`),
INDEX `fk_visit_site1_idx` (`siteId` ASC),
CONSTRAINT `fk_visit_site1`
FOREIGN KEY (`siteId`)
REFERENCES `site` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `visitinfo` (
`id` BIGINT(6) NOT NULL AUTO_INCREMENT,
`visitId` BIGINT(6) NOT NULL,
`ip` LONGTEXT NULL,
`os` LONGTEXT NULL,
`screen` LONGTEXT NULL,
`page` LONGTEXT NULL,
`referer` LONGTEXT NULL,
`device` LONGTEXT NULL,
`created` TIMESTAMP(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`, `visitId`),
INDEX `fk_visitinfo_visit2_idx` (`visitId` ASC),
CONSTRAINT `fk_visitinfo_visit2`
FOREIGN KEY (`visitId`)
REFERENCES `visit` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
|
|
|