你能帮我解决一下MySql中的row_number() over partition
吗?
我已经尝试过下面的脚本但它无法正常工作。我试图只选择购买的第一个产品。我选择的列是Client_id,product和purchase_date。
select * from(select * from (SELECT @rownum:=@rownum + 1 as row_number,t.*
FROM (select cliend_id,prod,purchase_date from Mytable
group by cliend_id,prod,purchase_date order by cliend_id,purchase_Date) asc) t,
(SELECT @rownum := 0) r)a)b;
结果:
Row_number Client ID Prod Purchase date
1 1111 apple 11-Nov-10
2 1111 yougurt 11-Nov-11
3 1111 candy 11-Nov-13
4 2222 chocolate 11-Nov-09
5 2222 pear 9-Sep-09
6 2222 beer 12-Sep-10
7 2222 cheese 12-Sep-14
8 1234 apple 15-Nov-12
9 1234 candy 4-Oct-14
我怎样才能得到这个结果?
Row_number Client ID Prod Purchase date
1 1111 apple 11-Nov-10
2 1111 yougurt 11-Nov-11
3 1111 candy 11-Nov-13
1 2222 chocolate 11-Nov-09
2 2222 pear 9-Sep-09
3 2222 beer 12-Sep-10
4 2222 cheese 12-Sep-14
1 1234 apple 15-Nov-12
2 1234 candy 4-Oct-14
谢谢, 罗迪卡
答案 0 :(得分:1)
您可以“记住”上一行cliend_id
的值,并使用该信息:
select (@rn := if(@c = cliend_id, @rn + 1,
if(@c := @liend_id, 1, 1)
)
) as rownum,
cliend_id, prod, purchase_date
from (select cliend_id, prod, purchase_date
from Mytable
group by cliend_id, prod, purchase_date
) t cross join
(select @rn := 0, @c := 0) vars
order by cliend_id, purchase_Date;
您应该在同一个语句中分配@rn
和@c
,因为MySQL不保证select
中表达式的评估顺序。