2017-07-16 135 views
-3

取人本人有2個表..(MySQL的)的MySQL,通過操作register_date

PERSONS(爲person_id PRIMARY_KEY)和操作(爲person_id FOREIGN_KEY)。

enter image description here

enter image description here

我需要每個交易之間的時間超過一年取人名單..

[![在這裏輸入的形象描述] [3] [ 3]

實施例,Jessy'a交易是

2012-12-25 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) > 1 YEAR(OK) 
2015-01-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2015-09-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2016-09-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2016-01-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2017-09-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2017-08-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2017-11-11 
       TIMEDIFF(op1.REGISTER_DATE,op1.REGISTER_DATE) < 1 YEAR 
2017-01-11 

如有TIMEDIFF> YEAR那麼這個人加入到我的清單,我需要這些persons..Please幫助..

+0

StackOverflow不是一個願望清單網站。我們不會因爲您發佈您的請求而爲您編寫代碼。我們可以幫助解決[某些關於主題的問題](https://stackoverflow.com/help/on-topic),但它是**你的**工作,以** [付出一些努力](http:// meta .stackoverflow.com/questions/261592)**,包括初級** [(重新搜尋)](https://google.com/)**。 –

+0

親愛的Marcin,這不是一個願望。我已經付出了足夠的努力。但是, 我無法做到這一點。 –

回答

0

我會做類似

select x from persons p 
    where not exists 
    (select o.id from operations o join operation o2 
     where o.person_id = p.id 
      and o2.person_id = p.id 
      and o.id != o2.id 
      and timediff(o.register_date, o2.register_date) < 1 year) 

我只是想設計理念,timeDiff測量是你必須查找的東西,看你如何減去時間戳並與時間間隔進行比較。

+0

查找具有1年及以上交易差異的人 –

+0

準確地說,這意味着(幾乎)所有沒有2次不同操作的人的近1年。 你也可以找到一個單人操作的人。如果從現在開始的運營時間超過1年,您是否完全不想要這些服務?還是想要退還這些服務?無論如何,一個想法,應該如何實現這個目標..... – aschoerk

0

在Oracle我試試這個...它的工作..但在MySQL?

SELECT PERSON_ID FROM 
(
SELECT 
op.PERSON_ID, 
row_number() OVER (PARTITION BY op.PERSON_ID ORDER BY op.PERSON_ID) rownumber, 
LEAD(op.REGISTER_DATE,1) over(PARTITION by op.PERSON_ID order by op.REGISTER_DATE), 
MONTHS_BETWEEN(LEAD(op.REGISTER_DATE,1) over(PARTITION by op.PERSON_ID order by op.REGISTER_DATE),op.REGISTER_DATE)AS ferq 
FROM operations op 
) 
WHERE ferq >= 12 AND rownumber = 1;