[英]MYSQL: greatest-n-per-group issue
Problem of greatest-n-per-group
and my MySQL version cannot use the LIMIT & IN (error 1235), so I need to use this kind of query (see answer here: answer ) greatest-n-per-group
问题和我的MySQL版本无法使用LIMIT&IN(错误1235),因此我需要使用这种查询(请参见此处的答案 : answer )
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
Subquery (t2 table) executed for exact match (card Number) returns exactly 5 rows (in this example): all perfect. 为完全匹配(卡号)而执行的子查询(t2表)恰好返回5行(在此示例中):全部完美。
My issue/request: 我的问题/要求:
Joining the two tables I would to obtain 5 rows and not only one, with the different 5 rows with the dates. 将两个表连接在一起,我将获得5行,而不仅是5行,而5行带有日期。
Your join
is working fine. 您的join
工作正常。 The problem is your select
statement: 问题是您的select
语句:
SELECT t1.idMemberCard,
DATE(MIN(transactions.dateTransaction)) AS first_transaction,
DATE(MAX(transactions.dateTransaction)) AS last_transaction,
t2.*
The use of MIN()
and MAX()
turn this into an aggregation query that returns only one row. MIN()
和MAX()
将其变成聚合查询,该查询仅返回一行。 Try this: 尝试这个:
SELECT t1.idMemberCard,
DATE(transactions.dateTransaction) AS first_transaction,
DATE(transactions.dateTransaction) AS last_transaction,
t2.*
Or add a group by
clause if you want that. 或者group by
如果需要,可以添加group by
子句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.