Sql 找到最早的记录
我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些如何实现这一点的想法。那里有3个表,我的目标是查找客户首次购买的月份、周和客户id。客户在第一个购物日可能会进行多次购买,我希望最早购买一次。下面是表格和我的尝试。我的代码的问题是它仍然输出重复的客户ID。我想也许有些顾客在第一天购买时会在不同的商店购物。提前谢谢Sql 找到最早的记录,sql,rank,Sql,Rank,我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些如何实现这一点的想法。那里有3个表,我的目标是查找客户首次购买的月份、周和客户id。客户在第一个购物日可能会进行多次购买,我希望最早购买一次。下面是表格和我的尝试。我的代码的问题是它仍然输出重复的客户ID。我想也许有些顾客在第一天购买时会在不同的商店购物。提前谢谢 cust cust_id | first_purchase | 001 | 20200107 002 | 20200109 00
cust
cust_id | first_purchase |
001 | 20200107
002 | 20200109
003 | 20200102
004 | 20200103
嗯。您可以使用
行编号()
:
谢谢你的建议。我试过这种方法。关键问题是我的客户表非常大。如果我只对第一行客户交易进行排序,整个程序可能需要大量时间。在本例中,我尝试定位第一个购买日期,然后对time@ChLi . . . 嗯?SQL不是这样工作的。SQL查询描述结果集。SQL优化器确定最佳执行计划。能否附加预期结果
date
datetime | week | month | year
20200107 | 2 | 1 | 2020 |
20200103 | 1 | 1 | 2020 |
20200102 | 1 | 1 | 2020 |
20200101 | 1 | 1 | 2020 |
sale
cust_id | store_id | time | datetime |
001 | 2342 | 9:00 | 20200107
002 | 2345 | 8:00 | 20200107
003 | 6234 | 2:00 | 20200107
004 | 4533 | 3:00 | 20200107
Select month, week, cust_id from cust
inner join date on cust. first_purchase= date.datetime
left join
(select distinct cust_id, store_id,min(datetime),min(time)
from sale group by cust_id,store_id)
as bdate
on cust.cust_id=bdate.cust_id
WHERE year ='2020' and first_purchase IS NOT NULL and MONTH=1 and week=1
select s.*, d.*
from (select s.*,
row_number() over (partition by cust_id order by datetime, time) as seqnum
from sales s
) s join
date d
on s.datetime = d.datetime and seqnum = 1;