Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать последнюю запись по одному полю / 2 сообщений из 2, страница 1 из 1
06.07.2018, 14:59
    #39670743
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать последнюю запись по одному полю
Имеется таблица:

Код: sql
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 мы задаём сами.

Я сделал такое:

Код: sql
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 может есть резон вообще сделать две таблицы?

Код: sql
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;
...
Рейтинг: 0 / 0
06.07.2018, 15:47
    #39670786
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать последнюю запись по одному полю
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать последнюю запись по одному полю / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]