2012-05-11 4 views
1

У меня есть две таблицы, mytableA и mytableB.Mysql: используя max (date), чтобы захватить только самые последние строки

MytableA выглядит следующим образом

ColumnA|Columnb 
Apple|fruitstand 
Pear|fruitstand 

mytableB выглядит следующим образом:

ColumnA|ColumnB|ColumnC 
Apple|2|4/1/2012 
Apple|3|4/3/2012 
Apple|23|12/1/2011 
Pear|1|12/22/2011 
Pear|0|4/22/2012

запрос у меня есть это

select * 
from 
    mytableB 
    join mytableB on mytableA.ColumnA = mytableB.ColumA 
    and mytableB.Columnc = (select max(Columnc) from mytableB b where b.ColumnA = mytableB.columnA) 

В результате я смотрю на это

 Apple|3|4/3/2012 
Pear|0|4/22/2012

Я знаю, что это работает в SQL, но имеет ли mysql аналогичный путь?

+0

Вы сделали опечатку в запросе, когда вы переименовали некоторые из таблиц/столбцов? Это не похоже на то, что 'myTableB.ColumnB' имеет какие-либо отношения с' myTableA.ColumnA' (из вашего соединения) – Tung

+0

Майк, я думаю, что ваш запрос по-прежнему не отредактирован правильно. Вы в настоящее время присоединяетесь к 'myTableB' с' myTableB'. Я предполагаю, что вы хотите присоединиться к 'myTableA' с' myTableB' на 'columnA'. Я просто попробовал интерпретацию вашего запроса, и он возвращает две строки, каждая из которых имеет дату MAX для каждого фрукта. Какой результат вы получаете? – Tung

ответ

0

Я попробовал. он работает (исключая тонны опечаток) на mysql, но результат не имеет для меня никакого смысла.

ColumnA | ColumnB  | ColumnA | ColumnB | ColumnC 
Apple  fruitstand  Pear  0   4/22/2012 
Pear  fruitstand  Pear  0   4/22/2012 

EDIT: вы можете использовать какой-либо индекс для идентификации записей.

как mytablea

ID | name | type 

mytableb

ID | fruitID | stock | date 

затем

SELECT mytablea.name, mytableb.stock, mytableb.date FROM mytablea, mytableb, 
     (SELECT MAX(mytableb.date) as maxDate FROM mytableb, mytablea 
     WHERE mytableb.fruitID = mytablea.ID GROUP BY mytablea.ID) AS maxTB 
     WHERE mytableb.date = maxTB.maxDate AND mytablea.ID = mytableb.fruitID 

должен сделать трюк ... это какой-то хромой большой подзапрос: -!

результат:

name | stock | date 
Apple 4  4/3/2012 
Pear 0  4/22/2012 
+0

Я хочу, чтобы выбрать данные из mytableB, где есть 1 к 1 отношения между mytablea и mytableB, где данные в mytableB, где только есть дата max –

+0

проблема, которую я получаю, это только выбор строк, где columnc max , так что даже если в mytableA есть 2 строки (яблоко, груша), он возвращает только грушу, потому что груша имеет более высокую дату –

+0

Я сделал небольшое обновление;) sry, что я не получил его в первый раз;) – Alex