SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.09.2010 11:49:55

Never
Участник
Зарегистрирован: 17.09.2010
Сообщений: 2

Нужен хитрый запрос


DROP TABLE IF EXISTS parents;
CREATE TABLE parents (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    title VARCHAR(20) NOT NULL DEFAULT '',
    PRIMARY KEY (id)
) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

DROP TABLE IF EXISTS children;
CREATE TABLE children (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    parent_id INTEGER UNSIGNED NOT NULL,
    title VARCHAR(20) NOT NULL DEFAULT '',
    ts INTEGER UNSIGNED NOT NULL,
    PRIMARY KEY (id)
)
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

INSERT INTO parents
    (id, title)
VALUES
    (1, 'Овощи'),
    (2, 'Фрукты'),
    (3, 'Ягоды');

INSERT INTO children
    (parent_id, title, ts)
VALUES
    (1, 'огурец',   3),
    (1, 'помидор',  2),
    (1, 'кабачок',  1),
    (1, 'морковь', 4),
    (1, 'картошка', 6),
    (2, 'яблоко',  6),
    (2, 'груша',    1),
    (2, 'арбуз',     8),
    (3, 'вишня',    1);


Задача запроса - получить:

---
Овощи - Картошка
фрукты - яблоко
Ягоды - арбуз
---

... т.е. для каждого типа по одной позиции из таблицы children с максимальным значением ts

Неактивен

 

#2 17.09.2010 12:24:18

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Нужен хитрый запрос

Сначала группируем, потом сортируем. Поэтому только с подзапросом.

SELECT
  parent.title, c.title
FROM
  (SELECT
  p.id, p.title, MAX(c.ts) AS ts
FROM
  parents AS p
INNER JOIN
  children AS c
ON
  p.id = c.parent_id
GROUP BY
  p.id) AS parent

INNER JOIN
  children AS c
ON
  parent.id = c.parent_id
AND
  c.ts = parent.ts
 

Неактивен

 

#3 17.09.2010 13:57:15

Never
Участник
Зарегистрирован: 17.09.2010
Сообщений: 2

Re: Нужен хитрый запрос

Ну с вложенным или нет - не суть. Главное получить одним запросом результат.

Спс за помощь.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson