返回第二个客户端访问日期的SQL

返回第二个客户端访问日期的SQL,sql,sql-server,date,Sql,Sql Server,Date,我有客户第一次拜访的日期。我想在一个新的专栏中,返回他们第二次访问的日期——他们第一次访问之后第二次访问的日期 Client_no First_Visit Receipt_no TransactionDate **1020634 2/24/2014 0:00 1350436 3/8/2014** 1020634 2/24/2014 0:00 1350530 3/9/2014 1020634 2/24/2014 0:00 1350760

我有客户第一次拜访的日期。我想在一个新的专栏中,返回他们第二次访问的日期——他们第一次访问之后第二次访问的日期

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014
*****=该客户的第二次访问

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014
工作
排名高于分区才是关键。按b划分的排名。按日期划分没有顺序,a、 最后一次ASC访问中,我删除了所有与第一次访问相同的日期,以避免排名加倍和从1跳到3 查询

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014

使用ALTERTABLE命令在数据库中添加列。请参阅数据库提供程序的文档

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014
然后,必须将写入此数据库的应用程序更改为写入新列,而不是表中的新行

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014
如果希望查询结果为新列,可以使用“自动联接”。例如:需要改进才能返回您想要的内容

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014
Select c.Client_no, c.First_Visit, c.ticket_no, c.Date Second_Visit 
From (Select b.Client_no,b.First_Visit,  a.ticket_no, 
Convert(date,a.Last_Mdt) Date, RANK () OVER (PARTITION BY b.client_no ORDER BY
Convert(date,a.Last_Mdt) ASC)Visit 
From Transactions_01 a
RIGHT JOIN (SELECT Client_no, Convert(date,first_Visit)First_Visit FROM Clients
Where First_Visit > DATEADD(D,-31,GETDATE()))  b on a.client_no = b.client_no
Where a.Last_Mdt > DATEADD(D,-31,GETDATE()) AND Convert(date,a.Last_Mdt) 
<>  B.First_Visit  AND A.Status=1

Group By b.Client_no,b.First_Visit,  a.ticket_no, Convert(date,a.Last_Mdt) )  c
WHERE  Visit =1 Order By c.Client_no,c.Date
如果您的数据库提供程序支持,则可以将concate与组一起使用。例如,对于mysql:

Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014
SELECT t1.Client_no, t1.First_Visit, t1.Receipt_no, t1.TransactionDate, t2.First_Visit
FROM my_log_table t1, my_log_table t2
WHERE t1.Client_no = t2.Client_no

此解决方案还需要改进以满足您的需要。

您使用的是哪种DBMS?博士后?Oracle?@a_horse_和_no_name SQL Server MSQ询问代码的问题必须显示出最小的努力。在问题本身中张贴你的尝试。排名高于分区成功了。按b排列分区。按Convertdate排列客户端。按Convertdate排列无顺序,按a。最后一次\u Mdt ASC访问IT wait wait wait wait wait。你不是在用**存储数据吧?如果他最终需要其他访问怎么办?此表最终可能会有几十个空N_Visit列,这是一个糟糕的设计。请求是一个新列。但你是对的,也许这是一个查询的新结果列。我会编辑是的,一个新的结果栏。事实上,我不能直接坐任何桌子。
Client_no   First_Visit    Receipt_no   TransactionDate
**1020634   2/24/2014 0:00  1350436     3/8/2014**
1020634     2/24/2014 0:00  1350530     3/9/2014
1020634     2/24/2014 0:00  1350760     3/10/2014
1020634     2/24/2014 0:00  1350891     3/11/2014
1020635     2/24/2014 0:00  1347544     2/24/2014
1020635     2/24/2014 0:00  1347551     2/24/2014
1020636     2/24/2014 0:00  1347553     2/24/2014
1020636     2/24/2014 0:00  1347555     2/24/2014
1020636     2/24/2014 0:00  1347554     2/24/2014
**1020636   2/24/2014 0:00  1348904     3/1/2014**
1020636     2/24/2014 0:00  1349662     3/5/2014
1020637     2/24/2014 0:00  1347596     2/24/2014
**1020637   2/24/2014 0:00  1348073     2/26/2014**
1020638     2/25/2014 0:00  1347690     2/25/2014
1020638     2/25/2014 0:00  1355142     3/22/2014
1020638     2/25/2014 0:00  1355132     3/22/2014
1020639     2/25/2014 0:00  1347749     2/25/2014
**1020639   2/25/2014 0:00  641852      2/26/2014**
1020639     2/25/2014 0:00  641846      2/26/2014
1020639     2/25/2014 0:00  641966      2/27/2014