2009-04-19 2 views
0

У меня есть 2 таблицы, используя внутреннее соединение для их запроса.Справка MySQL: SELECT table2.id ГДЕ ... table1.date является самым большим

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 (даты) - все, что я верну - это количество всех идентификаторов, а также максимальная дата, а не только те идентификаторы с максимальной даты.

Спасибо,


Я думал, возможно, вложенный запрос 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.

+1

Можете ли вы предоставить структуру обеих таблиц и именно то, что информации вы хотите получить из обеих таблиц? Это упростит предоставление правильного образца кода. –

ответ

0

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

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) 

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

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

Спасибо. Получил вложенную функцию выбора - фактический запрос значительно дольше, чем пример, который я опубликовал, и у меня была опечатка. – Dan

-1
...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10 

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

+0

Не совсем то, что я искал - мне нужно получить последнюю дату и выбрать все идентификаторы с этой датой. – Dan

+0

Это не ответ, а комментарий. Кроме того, это синтаксис MySql. – soulmerge

Смежные вопросы