MYSQL: наибольшая проблема для каждой группы

Проблема greatest-n-per-group и моя версия MySQL не может использовать LIMIT & IN (ошибка 1235), поэтому мне нужно использовать этот тип запроса (см. Ответ здесь: ответ )

SELECT
t1.idMemberCard,
DATE(MIN(transactions.dateTransaction)) AS first_transaction,
DATE(MAX(transactions.dateTransaction)) AS last_transaction,
t2.*
FROM membersCard AS t1
INNER JOIN transactions ON transactions.idMemberCard = t1.idMemberCard
INNER JOIN
(
SELECT
membersCard.idMemberCard,
membersCard.cardNumber,
membersCard.firstNameMemberCard,
membersCard.lastNameMemberCard,
transactions.dateTransaction
FROM membersCard
INNER JOIN transactions ON transactions.idMemberCard = membersCard.idMemberCard
WHERE membersCard.sexMemberCard = 'M'
AND membersCard.cardNumber = '1100101308655'
AND
DATE(transactions.dateTransaction) BETWEEN ('2013-12-28') AND ('2014-08-13')
LIMIT 100
) AS t2
ON t1.idMemberCard = t2.idMemberCard

Подзапрос (таблица t2), выполненный для точного соответствия (номер карты), возвращает ровно 5 строк (в этом примере): все идеально.

Моя проблема / запрос:

Соединяя две таблицы, я бы получил 5 строк, а не только одну, с разными 5 строками с датами.

0

Решение

Ваш join работает нормально. Проблема ваша select заявление:

 SELECT t1.idMemberCard,
DATE(MIN(transactions.dateTransaction)) AS first_transaction,
DATE(MAX(transactions.dateTransaction)) AS last_transaction,
t2.*

Использование MIN() а также MAX() превратить это в запрос агрегации, который возвращает только одну строку. Попробуй это:

 SELECT t1.idMemberCard,
DATE(transactions.dateTransaction) AS first_transaction,
DATE(transactions.dateTransaction) AS last_transaction,
t2.*

Или добавить group by оговорка, если вы этого хотите.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]