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
答案 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;
此解决方案还必须进行改进以满足您的需求。