【问题标题】:get the last record in each group in MYSQL singular table, with criteria that ignores certain groups获取MYSQL奇异表中每个组中的最后一条记录,条件忽略某些组
【发布时间】:2013-03-11 06:52:25
【问题描述】:

我尝试了 Karwin 先生在这里提出的解决方案
Retrieving the last record in each group

我有一个单数表,其中包含我需要的所有记录以及 FF 记录。

 --------------------------------------------------
 | Keynum     | PaymentID  | BuyerID | LatestBill |
 |----------- | -----------|---------|------------|
 |   3        |    4       |    4    |  30000     |
 |   2        |    4       |    4    |  10000     |
 |   1        |    4       |    4    |  10000     |
 |   1        |    9       |    9    |  9999      |
 --------------------------------------------------

想要的输出是:

 --------------------------------------------------
 | Keynum     | PaymentID  | BuyerID | LatestBill |
 |----------- | -----------|---------|------------|
 |   3        |    4       |    4    |  30000     |
 |   1        |    9       |    9    |  9999      |
 --------------------------------------------------

我尝试过的是:

  Select keynum, PaymentID, BuyerId, LatestBill From  Sales where LatestBill != 0 group by PaymentID, BuyerID order by keynum  Desc;

还有这个

 SELECT max(keynum), PaymentID, BuyerID, NewInstallmentBal
 FROM aliissales.tblmovedactual
 GROUP BY PaymentID, BuyerID DESC;

但是,我得到的是:

 --------------------------------------------------
 | Keynum     | PaymentID  | BuyerID | LatestBill |
 |----------- | -----------|---------|------------|
 |   1        |    4       |    4    |  10000     |
 |   1        |    9       |    9    |  9999      |
 --------------------------------------------------

我需要的是每组的最后一条记录,每条记录按 PaymentID 和 BuyerID 分组。

如果我使用 Max(keynum),它确实会获得每个组的最大 keynum,但不会获得相应的记录。是让记录与 Keynum 一起使用的更简单方法吗??

此外,如果 LatestBill = 0,现在将忽略整个组。

如果

keynum 3 LatestBill = 0, group BuyerID 4 , PaymentID 4 is now ignored.    

【问题讨论】:

    标签: mysql sql group-by greatest-n-per-group


    【解决方案1】:
    SELECT  a.*
    FROM    aliissales.tblmovedactual a
            INNER JOIN
            (
                SELECT  max(keynum) xx, PaymentID, BuyerID
                FROM    aliissales.tblmovedactual
                GROUP   BY PaymentID, BuyerID
            ) b ON  a.PaymentID = b.PaymentID   AND
                    a.BuyerID = b.BuyerID AND
                    a.keynum = b.xx
    

    【讨论】:

    • 谢谢,但是我将在哪里添加一个条件来忽略满足特定条件的记录?例如,如果 LatestBill = 0,记录将被忽略。我尝试在连接中添加 (where) 语句,但它现在显示 2 | 4 | 4 | 10000
    • 你可以在最外层的选择前添加,sqlfiddle.com/#!2/099c3/3
    • 如果我可以问,max(keynum) 旁边的 xx 是什么?编辑:啊,这是一个...别名?
    • @Malky.Kid 哦,这个专栏叫ALIAS
    • 好的,我要深入了解一下。这是一项很棒的技术,非常感谢您
    【解决方案2】:

    SELECT keynum、PaymentID、BuyerID、NewInstallmentBal FROM aliissales.tblmovedactual WHERE keynum IN ( 选择最大值(keynum) FROM aliissales.tblmovedactual GROUP BY PaymentID )

    【讨论】:

      猜你喜欢
      • 2010-11-21
      相关资源
      最近更新 更多