昨天老板讓我查詢項目中(眾籌),沒人剛發起感召后,前三筆錢的入賬時間和金額,這把大哥整懵逼了,group by在某些方面是好使,但這次不能為我所用了,獲取第一筆進賬是簡單,可以用group by 直接獲取就好,但是后面的吶,我百度反思后,最終實現,上代碼,今天寫篇博客,也算是記錄一下這個知識點:
獲取第一筆進賬,我是這么搞得
select o.id,f.createdTime,round(f.money/100,0),sum(f.money) ct from(select *from organise where periodId = 251 and status = 4)o,follower f where f.status=1 and f.organiseId = o.id group by o.id order by o.id desc
organise 為發起表 follower為支持明細表
第一筆,通過對感召人進行分組 group by o.id 排序后獲取的就是第一比的進賬時間/金額
想要獲取第二筆進賬,group by 就無能為力了,需要用上limit 1,1 ,代碼如下:
SELECT aa.* FROM follower aa WHERE aa.id=(SELECT f.id from(SELECT id FROM organise WHERE periodId=251 and status=4)o,follower f WHERE o.id = f.organiseId and f.status=1
and aa.organiseId =o.id ORDER BY f.createdTime LIMIT 1,1) ORDER BY aa.organiseId desc
思路: 先根據感召者的發起id關聯支持表,limit查出查出需要的是第幾條數據,然后再利用最外面的支持表進行反查,最后獲取自己想要的數據
話說這樣的sql語句,是不能應用在項目中的,因為會花大量的時間,查詢這條數據得至少一份鍾的時間.請慎用,在項目中還是建議用代碼的形式去實現,僅僅想直接用sql獲取的這種方法,是耗時耗性能的不可取的!