MySQL Help: SELECT table2.id WHERE ... table1.date является самым большим - PullRequest
0 голосов
/ 19 апреля 2009

У меня есть 2 таблицы, я использую внутреннее соединение для их запроса.

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

Подсчитывает идентификаторы записей в отчетах между 2 датами. Таблица 1 содержит информацию об отчетах (дата, groupid и т. Д.), Таблица 2 содержит записи в отчетах.

Я бы хотел сделать запрос почти таким же, за исключением того, что он выбирает только идентификаторы из отчета с самой последней датой, между этими двумя датами.

Кто-нибудь может помочь? Я не могу полностью разобраться с запросами типа MAX (date) - все, что я получаю, - это счетчик каждого идентификатора и максимальной даты, а не только идентификаторы из максимальной даты.

Спасибо


Я думал, возможно, вложенный SQL-запрос - вы можете сделать это? Я могу найти ссылки в Google, но не могу заставить его работать ... Что-то похожее на:

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

Не могу заставить это работать, и когда я пытаюсь протестировать его в phpMyAdmin, он вылетает с ошибкой, сообщающей, что у моего пользователя нет привилегий SELECT. Странно, так как это тестовый сервер, я вошел в систему как root.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2009

Без дополнительной информации относительно структуры таблиц, я бы предложил вам попробовать что-то вроде этого:

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

Я не проверял это, но оно должно указывать в одном направлении, что вы могли бы пойти с этой проблемой. Ваше другое предложение об использовании подзапроса является действительным и может работать примерно так:

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

Или в соединении с временной таблицей:

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id
0 голосов
/ 19 апреля 2009
 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

даст вам 10 первых строк с датами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...