mysql查询 - 每个客户返回一行,如for循环

时间:2015-01-09 05:43:28

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

我的问题是:我们有一份表格中捐赠者的付款记录,这些记录按照自2004年以来输入的顺序排列。我们的新POS软件导入向导会导入用户捐赠每次进口每次进口一次交易。 (即,捐赠者1:交易1,捐赠者2:交易1等)我需要在按事务排序的用户组中从MySQL导出我的捐赠表,这样我就可以将它们分解为准备导入的组。

因此,例如,如果donor_id A有3个事务,并且donor_id B有1个事务而C有5个事务,则输出应该如下所示:

  timestamp       |   donor_id   |    donor_name   |    received_date   |     amount 
+-----------------------------------------------------------------------------------+ 
| 2005-08-12      |       A      |       joe       |      2004-08-10    |      $1,000 
| 2004-08-01      |       B      |       pete      |      2005-08-01    |        $250
| 2006-09-15      |       C      |       sue       |      2006-09-15    |        $350
| 2006-08-12      |       A      |       joe       |      2005-08-11    |        $250
| 2007-08-08      |       C      |       sue       |      2007-08-08    |        $350
| 2007-07-30      |       A      |       joe       |      2006-07-29    |        $350
| 2008-08-11      |       C      |       sue       |      2008-08-05    |        $350
| 2009-09-01      |       C      |       sue       |      2009-08-31    |        $250
| 2010-08-01      |       C      |       sue       |      2010-08-01    |        $350

正如您所看到的,我可以在Excel中编辑的模式已经出现。每次捐赠者进行交易时,都会将其放入具有相同COUNT个交易的其他捐赠者的分组中。所以3个交易的捐赠者被分组3次。当具有最大事务数量的捐赠者将其最后一个事务作为最后一个分组输出时,查询结束。

A-B-C分组1,A-C分组2,A-C分组3,C分组4,C分组5。

有什么想法吗?谢谢! 〜里奇

3 个答案:

答案 0 :(得分:0)

我认为我需要的是每行的等价于行循环。

它通过表格的东西,计算捐赠者列出的次数,记录每个列表并将其应用于基于捐赠者*交易的组。 (第一个捐助者名单,第二个捐助者名单等)

我一直在研究......你认为我需要使用聚合物吗?

found this

答案 1 :(得分:0)

好的,我想我可能有它..

将“mytable”更改为您的表名

SET @position := 0;
SET @prev_cat := "";

SELECT timestamp, donor_id, donor_name, received_date, amount, donor_number
FROM (
SELECT
    timestamp,
    donor_id,
    donor_name,
    received_date,
    amount,
    IF(@prev_cat = donor_id, @position := @position + 1, @position := 1) AS donor_number,
    @prev_cat := donor_id
FROM mytable
ORDER BY donor_id ASC
) AS tmp
ORDER BY donor_number, donor_id

内部SELECT使用递增变量对供体进行编号。它的IF语句在变量到达下一个捐赠者时重置变量。外部ORDER BY按donor_number和donor_id

对它们进行排序

答案 2 :(得分:-1)

我能想到的唯一方法是一次列出一个捐赠者,为他们的捐赠记录分配一个递增的数字。为所有捐赠者做到这一点。

然后按照"分配号码,捐赠者名称"

排序

^不确定如何为每个捐赠者分配递增数字。在php中会是小菜一碟;)