选择每个客户的最后时间顺序记录,其中每个客户在许多日期都有许多记录

时间:2012-11-15 14:27:33

标签: mysql where

我正在尝试从MySQL数据库中获取每个成员的最新事务,其中每个成员可能具有不同数量的事务记录。我还必须将交易表链接到customers表,以确保我没有得到任何特殊订单记录。

这是我的SQL:

Select  membertransactions.maingym_id,
        membertransactions.member_id,
        membertransactions.action_id,
        Max(membertransactions.date_time) As 'Latest Transaction Date', 
        membertransactions.date_time

From    bd1.membertransactions
  Inner Join    db1.customers 
  On    membertransactions.member_id = customers.id
Where   customers.orderno <>'SPECIAL ORDER'

AND     membertransactions.main_id = 1

AND     Date_Format(membertransactions.date_time,'%Y%m%d') < '20121101'

Group By membertransactions.member_id, 'Latest Transaction Date'

每个客户我得到一行,但它并不总是按时间顺序排列的最新行。我真的被困在这里,非常感谢任何提供的帮助。

由于

1 个答案:

答案 0 :(得分:2)

因为您正在使用mysql,所以您可以使用mysql的一个特殊功能来完成这项工作。方法如下:

select * from (
    Select
        membertransactions.maingym_id,
        membertransactions.member_id,
        membertransactions.action_id,
        membertransactions.date_time
    From bd1.membertransactions
    Join db1.customers On membertransactions.member_id = customers.id
    Where customers.orderno <> 'SPECIAL ORDER'
    AND membertransactions.main_id = 1
    AND Date_Format(membertransactions.date_time,'%Y%m%d') < '20121101'
    order by membertransactions.date_time desc) x
Group By member_id

我完全删除了max(date)内容,内部选择以最新的第一个日期顺序获取所有记录,然后通过member_id获取外部选择组。这是关键:在mysql中,如果你有一个组,而没有聚合其余列,那么你将得到该组的第一个行。

其他数据库会在此SQL上出现语法错误,但在mysql中它的作用就像魅力


另请注意更易读的格式。我从来没有理解为什么人们使用“左对齐每行第二个字”格式。我希望我能找到那个第一个做过那个并让他鞭打的人。