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'

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

谢谢

4

1 回答 1

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 中,如果您有一个 group by而不聚合剩余的列,您将获得该组的第一行。

其他数据库会在此 SQL 上给出语法错误,但在 mysql 中它就像一个魅力


另请注意更具可读性的格式。我从来不明白为什么人们使用“左对齐每行的第二个单词”格式。我希望我能找到第一个这样做的人并鞭打他。

于 2012-11-15T14:33:19.577 回答