簡體   English   中英

MYSQL:每組最多n個問題

[英]MYSQL: greatest-n-per-group issue

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

為完全匹配(卡號)而執行的子查詢(t2表)恰好返回5行(在此示例中):全部完美。

我的問題/要求:

將兩個表連接在一起,我將獲得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如果需要,可以添加group by子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM