1,有一张交易流水表,里面记录交易时间(pay_date)、交易人卡Id(cardId),需要统计,连续有交易流水的人,的前10名?
这条语句该怎么写?或者有其他的办法吗
SELECT * FROM (SELECT P_T.*, ROWNUM AS RN FROM
(SELECT C.CARD_ID,MAX(C.COUNTS) AS MAXDAYS,CARD.NAME AS customUserName,CARD.SALARY_NO
FROM (SELECT B.CARD_ID,B.DAYS,COUNT(B.CARD_ID) AS COUNTS
FROM (SELECT A.CARD_ID, A.PAY_DATE - ROWNUM AS DAYS
FROM (SELECT CARD_ID,TO_DATE(TO_CHAR(PAY_DATE, 'YYYYMMDD'), 'YYYYMMDD') AS PAY_DATE
FROM T_PM_PAY_${restaurantNo}
<![CDATA[ WHERE TO_CHAR(PAY_DATE, 'YYYY-MM-DD') <= '2016-12-31' AND CARD_ID!='1000000000']]>
GROUP BY CARD_ID, TO_CHAR(PAY_DATE, 'YYYYMMDD')
ORDER BY CARD_ID, TO_CHAR(PAY_DATE, 'YYYYMMDD')
) A
) B
GROUP BY B.CARD_ID, B.DAYS) C
LEFT JOIN T_UM_CARDINFO CARD
ON C.CARD_ID = CARD.CARD_ID AND CARD.ORG_ID=#{orgId}
GROUP BY C.CARD_ID ,CARD.NAME,CARD.SALARY_NO
ORDER BY MAXDAYS DESC, C.CARD_ID ASC
) P_T)
<![CDATA[ WHERE RN <=10]]>
关注这个问题50分钟,也想学习一下怎么写,orcale没有top,确实不好写。
个人感觉可以加个字段,用来记录已经是连续第几天有交易了,只要断掉再从1开始,这样在最后统计的时候查这个字段的前10能好一些
只是不知道业务上插如流水的时候这个值好不好算,这个你看情况
求采纳
如果在最初确实是个好办法,可是交易流水已经生成!该项目已经线上运行!
交易时间(pay_date)、交易人卡Id(cardId)
select * from pay A where exists (select 1 from pay B where A.id = B.id and A.pay_date = B.pay_date -1)
这是统计有连接交易的,并且pay_date不带时间,如果带时间的话,需要截一下
没看到你那个排名前10是按交易量还是按连续天数,所以你自己按这个思量写一下吧,如果不会,可以站内短信给我,帮你再看看
已经搞定!thank you!