2012-11-15 63 views
2

我想获得最新的交易,从MySQL数据库中的每个成员,每个成员可以有不同数量的交易记录有许多记录最后按时间顺序记录。我也有事务表链接到客户表,以确保我没有得到任何特殊的订单记录。选择每个客户,每个客户在许多日期

这里是我的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' 

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

感谢

回答

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它就像一个魅力


还要注意更易读的格式。我从来没有理解为什么人们使用“左对齐每行的第二个字”格式。我希望我能找到那个第一个那样做的人并让他鞭打。试图运行该代码时,在“组声明” ** 1054未知列“membertransactions.member_id”:

+0

感谢这个波希米亚,不幸的是我得到一个错误:**错误代码。还有什么想法?再次感谢你的帮助。 – enCue

+0

@enCue我只是快速输入它现在是固定的 - 它应该只是'集团通过member_id'。见编辑答案 – Bohemian

+0

感谢这么很为这样的服务,它的工作一种享受。 – enCue