我有一个看起来像这样的数据库表
customer type || transaction date || amount
a || June 27 2016 || $10
我想按客户类型划分的交易日期添加行号订单。
select
customertype,
row_number() over(partition by customertype order by transactiondate desc) as 'rowNum'
from
myDB
查询的一个问题是我得到了这个:
customer type || transaction date || amount || rowNum
A || Jan 1 2016 || $20 || 1
A || Jan 1 2016 || $40 || 2
问题是我不想为不同的金额分配不同的rowNum
。
无论金额多少,两行都应该有rowNum =。
另一个问题是我想显示最近的三笔交易。 我知道一种方法是为每个事务添加行号,但我的数据库包含来自90年代后期的数据。它太大了。
所以,我想限制最近3次交易的搜索,而不进行外部查询。
我的想法是,我没有那么多客户类型,所以也许我可以追溯每个客户类型的3个以上交易,我相信这些交易要轻得多。
谢谢!
答案 0 :(得分:1)
将row_number
替换为dense_rank
select customertype,
dense_rank() over (partition by customertype
order by transactiondate desc) as 'rowNum'
from myDB
您可以假设您在过去30天内至少有过3次交易吗?
使用WHERE
选择过去30天内的交易,然后使用row_number降序查找最近3笔交易。
答案 1 :(得分:0)
我认为您需要这样的查询:
SELECT myDB.*, t.rn
FROM myDB
LEFT JOIN
(SELECT
customertype, transactiondate,
ROW_NUMBER() OVER (ORDER BY customertype, transactiondate) rn
FROM myDB
GROUP BY
customertype, transactiondate) t
ON myDB.customertype = t.customertype AND myDB.transactiondate = t.transactiondate;
未经测试;)。