powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать последнюю запись по одному полю
2 сообщений из 2, страница 1 из 1
Выбрать последнюю запись по одному полю
    #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
Выбрать последнюю запись по одному полю
    #39670786
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать последнюю запись по одному полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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