Sql 找到最早的记录

Sql 找到最早的记录,sql,rank,Sql,Rank,我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些如何实现这一点的想法。那里有3个表,我的目标是查找客户首次购买的月份、周和客户id。客户在第一个购物日可能会进行多次购买,我希望最早购买一次。下面是表格和我的尝试。我的代码的问题是它仍然输出重复的客户ID。我想也许有些顾客在第一天购买时会在不同的商店购物。提前谢谢 cust cust_id | first_purchase | 001 | 20200107 002 | 20200109 00

我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些如何实现这一点的想法。那里有3个表,我的目标是查找客户首次购买的月份、周和客户id。客户在第一个购物日可能会进行多次购买,我希望最早购买一次。下面是表格和我的尝试。我的代码的问题是它仍然输出重复的客户ID。我想也许有些顾客在第一天购买时会在不同的商店购物。提前谢谢

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;