2016-03-08 48 views
1

你好,你在圖片中看到連接,我想用這個查詢SELECT COUNT MAX(值),其中

SELECT count(idmilestone) 
FROM milestoneevent 
WHERE max(idmilestone=1) 

我想在我的情況來計算所有與最後一個里程碑= 1文件提取數據表它必須回到5,因爲兩個文件了具有里程碑意義現在2請幫我實現這個

enter image description here

+3

你爲什麼使用max(idmilestone = 1) – Deep

+0

有7個'idmilestone = 1',你爲什麼或者如何得到5? – chris85

+0

這是因爲有2個'idfile'(1和2)替代'idmileston = 2'的'idmilestone = 1'。所以他們的最後一個'idmilestone'是2 – AleOtero93

回答

0
select count('id') 
from (select idfile, max(idmilestone) as max_idmilestone 
     from milestoneevent 
     group by idfile 
    ) d 
where max_idmilestone = 1; 
+0

謝謝你的工作,但爲什麼d是這個別名需要 –

+0

只是你可以得到你自己的自定義標籤字段名稱的結果。沒有別的:) – Deep

+0

每個派生表都需要別名(即使不使用) – Drew

1

嘗試這個

SELECT count(idmilestone) 
FROM milestoneevent 
WHERE idfile NOT IN(SELECT idfile 
    FROM milestoneevent 
    WHERE idfile > 1) 
+0

這是不正確的,這個查詢還會帶來idfile 1,最後idmilestone是2 – AleOtero93

+0

不工作這個返回7它,ust返回5爲正確的查詢 –

+0

你寫了問題「我想要計算所有的文件與最後一個里程碑= 1「 –

2

對於您提供的數據,里程碑數量在不斷增加。如果這是大致如此,你可以簡單地做:

select count(*) 
from (select idfile, max(idmilestone) as max_idmilestone 
     from milestoneevent 
     group by idfile 
    ) m 
where max_idmilestone = 1; 

或者,您可以使用dat定義的最後一個:

select count(*) 
from milestonemevent me 
where me.dat = (select max(me2.dat) 
       from milestonemevent me2 
       where me.idfile = me2.idfile 
       ) and 
     me.idmilestone = 1; 
1

請試試這個,它會給idmilestone的計數其是至少一個,即1

SELECT count(idmilestone) FROM milestoneevent 
WHERE idmilestone =(SELECT MIN(idmilestone) FROM milestoneevent) 

,如果你想指望它等於1,那麼試試這個

SELECT count(idmilestone) FROM milestoneevent 
WHERE idmilestone =1 
1

您可以使用此一LEFT JOIN

SELECT t1.id, t1.idfile, t1.idmilestone 
FROM milestoneevent AS t1 
LEFT JOIN milestoneevent AS t2 
    ON t1.idfile = t2.idfile AND t1.dat < t2.dat 
WHERE t1.idmilestone = 1 AND t2.id IS NULL 

Demo here

要計算使用COUNT

SELECT COUNT(*) 
FROM milestoneevent AS t1 
LEFT JOIN milestoneevent AS t2 
    ON t1.idfile = t2.idfile AND t1.dat < t2.dat 
WHERE t1.idmilestone = 1 AND t2.id IS NULL 
GROUP BY t1.idfile 
1

試試這個:

SELECT COUNT(*) 
FROM (
    SELECT idmilestone 
    FROM milestoneevent 
    GROUP BY idmilestone 
    HAVING COUNT(*) = 1 
) 
WHERE idmilestone=1