Проблема 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 строками с датами.
Ваш 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
оговорка, если вы этого хотите.
Других решений пока нет …