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

时间:2014-03-26 16:00:46

标签: 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     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

我有客户第一次访问的日期。我想在新专栏中返回他们第二次访问时的日期 - 第一次访问后第二次访问的日期。

** ** =该客户的第二次访问

工作

RANK()在分区上做了伎俩。 RANK()OVER(PARTITION BY b.client_no ORDER BY Convert(date,a.Last_Mdt)ASC)访问

在WHERE我删除了所有等于First_Visit的日期,以避免RANK加倍和跳跃1至3.

QUERY

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

1 个答案:

答案 0 :(得分:1)

使用ALTER TABLE命令在数据库中添加一列(请参阅数据库提供程序的文档)。

然后,您必须将写入此数据库的应用程序更改为在新列中写入,而不是在表中写入新行。

如果您希望新列作为查询的结果,则可以使用自动联接。类似的东西:(需要改进才能准确地返回你想要的东西)

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

如果您的数据库提供程序支持它,您可以使用与组的串联。例如对于mysql:

SELECT Client_no, GROUP_CONCAT(Receipt_no SEPARATOR ' ') , GROUP_CONCAT(TransactionDate SEPARATOR ' '), GROUP_CONCAT(First_Visit SEPARATOR ' ') FROM my_log_table GROUP BY Client_no;

此解决方案还必须进行改进以满足您的需求。