2017-03-17 136 views
0

1列篩選結果我做了一個艱難的時間想出一個合適的標題。這是問題。我試圖確定新用戶,月份,月份,他們何時進入工具並制定計劃。SQL - 基於最新另一列

這裏是我到目前爲止

select 
distinct userID, 
MIN(planID), 
MIN(PlanCreated) 
from dataBaseName.tableName 
Group by userID 

這爲我提供了我所需要的地面信息。我得到了用戶以及他們創建的第一個計劃和時間。

不過,我需要進一步細化此。由於有些用戶進入該工具,只創建該計劃,使其處於「草稿」狀態,並且永遠不會返回。我需要過濾超過3個月的草案計劃。

有一個「PlanStatus」列了基於「草稿」狀態過濾是很簡單的

where PlanStatus 
is not in 'Draft' 

但同樣,我只是想去掉比3的結果個月以上的計劃。

ex。日期格式 - 2017年1月1日00:00:00

我也不知道該過濾器應先這樣做,如果他們後來創建了一個計劃,再搬出來的狀態草案ID沒有被完全清除。

的樣本數據:

planID | userID | PlanCreated   | PlanStatus | OtherColumns 

    1111 |  2 | 2016-01-17 00:00:00 | Completed | null 

    1112 |  1 | 2016-06-31 00:00:00 | Draft  | null 

    1113 |  2 | 2017-01-24 00:00:00 | Completed | null 

    1114 |  3 | 2017-02-04 00:00:00 | Draft  | null 

    1115 |  1 | 2017-03-12 00:00:00 | Draft  | null 

預期結果:

planID | userID | PlanCreated   | PlanStatus | OtherColumns 

    1111 |  2 | 2016-01-17 00:00:00 | Completed | null 

    1114 |  3 | 2017-02-04 00:00:00 | Draft  | null 

    1115 |  1 | 2017-03-12 00:00:00 | Draft  | null 

請幫

+0

標籤您與您正在使用的數據庫的問題。另外樣本數據和期望的結果將有所幫助。 –

+0

增加以及預期的結果和數據庫的樣本數據標記 – Zardoz

+0

注意,如果PlanId不增加順序你可能使用'MIN(planID), MIN(PlanCreated)'當得到一個錯誤的結果。你真的想要返回所有專欄還是隻有這三個? – dnoeth

回答

0

首先,你在哪裏學習使用select distinct與聚合函數。正確的語法是:

select userID, min(planID), min(PlanCreated) 
from dataBaseName.tableName 
Group by userID; 

不需要distinct。那麼你想要一個where。以下是一種方法:

select userID, min(planID), min(PlanCreated) 
from dataBaseName.tableName 
where not (status = 'draft' and plandate < '2017-01-01') 
Group by userID; 

請注意日期函數和常量可能因數據庫而異。

+0

獨特的使用是由同事推薦的。我在過去的兩週裏一直在學習,並且今天撞牆。這似乎正是我所需要的。接下來要弄清楚如何使用今天的日期 - 3個月而不是硬編碼日期。 – Zardoz

+1

@ Zardoz。 。 。 '.ADD_MONTHS(CURRENT_DATE,-3)'投入'那裏不是之後 –

0

試試這個:

SELECT userID, MIN(planID) , MIN(PlanCreated) FROM dataBaseName.tableName 
WHERE NOT (status = 'draft' AND DATEDIFF(DAY, plancreated, getDate()) > 90) 
GROUP BY userID 
+0

不幸的是(PlanStatus = '草稿' 和DATEDIFF(DAY,PlanCreated,GETDATE())> 90)'我收到以下錯誤'語法錯誤:預期的東西'('和'DAY'關鍵字之間。' – Zardoz

+0

我不知道你用什麼數據,但我認爲'DateDiff'不受支持。 –