现在有以下两个表:卡交易表trans和卡信息表card。
表结构card
-----------
card(卡号)|
-----------
11
15
-----------
trans
-----------------------------------------------------------------------------
card (卡号) | amount(金额) | transdate(交易日期) | transtime (交易时间) |
-----------------------------------------------------------------------------
11 2 20120102 112531
12 2 20120102 112633
13 5 20120102 130159
11 2 20120102 152533
13 5 20120102 153857
15 2 20120102 155143
13 5 20120102 160159
15 2 20120102 172633
15 5 20120102 190160
16 2 20120102 172633
16 5 20120102 190160
------------------------------------------------------------------------------有这样的需求:在trans表中找出card表中任意两张卡或同一张卡之间的记录。
我的想法是使用轮循trans表中记录的方法来找,但这样会不会比较耗时间?有没有更好的办法?
表结构card
-----------
card(卡号)|
-----------
11
15
-----------
trans
-----------------------------------------------------------------------------
card (卡号) | amount(金额) | transdate(交易日期) | transtime (交易时间) |
-----------------------------------------------------------------------------
11 2 20120102 112531
12 2 20120102 112633
13 5 20120102 130159
11 2 20120102 152533
13 5 20120102 153857
15 2 20120102 155143
13 5 20120102 160159
15 2 20120102 172633
15 5 20120102 190160
16 2 20120102 172633
16 5 20120102 190160
------------------------------------------------------------------------------有这样的需求:在trans表中找出card表中任意两张卡或同一张卡之间的记录。
我的想法是使用轮循trans表中记录的方法来找,但这样会不会比较耗时间?有没有更好的办法?
trans
-----------------------------------------------------------------------------
card (卡号) | amount(金额) | transdate(交易日期) | transtime (交易时间) |
-----------------------------------------------------------------------------
11 2 20120102 112531
12 2 20120102 112633
13 5 20120102 130159
11 2 20120102 152533
13 5 20120102 153857
15 2 20120102 155143
13 5 20120102 160159
15 2 20120102 172633
15 5 20120102 190160
16 2 20120102 172633
16 5 20120102 190160
------------------------------------------------------------------------------
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
这句没明白什么意思
-- PostgreSQLcreate table managecard (
id serial,
managecard char(18) not null
);insert into managecard(managecard) values ('207999900100000020');
insert into managecard(managecard) values ('207999900100000021');
insert into managecard(managecard) values ('207999900100000022');create table trans (
id serial,
card char(18) not NULl,
transtype char(10) not null,
transtime char(6)
);insert into trans (card, transtype, transtime ) values ('207999900100000026', '消费', '050000');
insert into trans (card, transtype, transtime ) values ('207999900100000020', '消费', '050100');
insert into trans (card, transtype, transtime ) values ('207999900100000023', '存款', '050200');
insert into trans (card, transtype, transtime ) values ('207999900100000024', '积分消费', '050300');
insert into trans (card, transtype, transtime ) values ('207999900100000022', '启用', '050400');
insert into trans (card, transtype, transtime ) values ('207999900100000026', '消费', '050500');
insert into trans (card, transtype, transtime ) values ('207999900100000023', '积分消费', '050600');
insert into trans (card, transtype, transtime ) values ('207999900100000021', '消费', '050700');
insert into trans (card, transtype, transtime ) values ('207999900100000020', '积分消费', '050800');
insert into trans (card, transtype, transtime ) values ('207999900100000021', '消费', '050900');
insert into trans (card, transtype, transtime ) values ('207999900100000023', '启用', '051000');
/*
过程:
以上trans表数据从第一条记录a开始,如果a的卡号在managecard表中存在,则此条数据其后
的各条数据的卡号都记录在a的卡号旗下,直到遇到下一条卡号在managecard中存在的数据记录b.
如果b的卡号在managecard表中存在,则此条数据其后
的各条数据的卡号都记录在b的卡号旗下,直到遇到下一条卡号在managecard中存在的数据记录c...,
如此往复。 根据以上数据及需求得出的结果应该是:
managecard card transtype transtime
-------------------------------------------------------------------
207999900100000020 207999900100000023 存款 050200
207999900100000020 207999900100000024 积分消费 050300
207999900100000022 207999900100000026 消费 050500
207999900100000022 207999900100000023 积分消费 050600
207999900100000021 207999900100000023 启用 051000
*/