2013-08-24 40 views
0

不知道如何做到這一點,但我試圖從MYSQL數據庫中獲取所有已經有多年拖欠行爲的包裹。現在,我可以指望我多少拖欠具有使用下面的查詢給出的歲月:MYSQL查詢 - 抓取滿足條件的所有記錄3次或更多次

SELECT 
    parcel, COUNT(*), due 
FROM 
    `deliquent_property` 
WHERE year IN ('2013', '2012', '2011', '2010', '2009') AND 
     CAST(replace(replace(ifnull(due,0),',',''),'$','') AS decimal(10,2)) > 0 
GROUP BY parcel 
HAVING COUNT(*) > 2; 

所以我得到這樣的

'XXX-XXX-XXX1' '3' '167.00' 
'XXX-XXX-XXX2' '4' '190' 

哪裏量爲包裹中最後一條記錄DB。問題是我真正想要的是顯示逾期金額每幾年包裹的列表,像這樣(跳過那些不具有至少3個拖欠):

'XXX-XXX-XXX1' '2013' '1267.78' 
'XXX-XXX-XXX1' '2012' '1000.38' 
'XXX-XXX-XXX1' '2011' '167.00' 
'XXX-XXX-XXX2' '2013' '1000.00' 
'XXX-XXX-XXX2' '2012' '500.00' 
'XXX-XXX-XXX2' '2011' '100.00' 
'XXX-XXX-XXX2' '2010' '190.00' 

我中途有,但我失去了最後一部分。

+0

謝謝瓦希德Hallaji重新格式化我的問題,你是怎麼得到的代碼顯示出來吧,我試過的代碼標誌,但沒有工作... –

回答

1

您可以將表加入您的列表。這裏有一種方法:

select dp.* 
from delinquent_property dp join 
    (SELECT parcel, COUNT(*) 
     FROM delinquent_property 
     WHERE year IN ('2013', '2012', '2011', '2010', '2009') AND 
      CAST(replace(replace(ifnull(due,0),',',''),'$','') AS decimal(10,2)) > 0 
    GROUP BY parcel 
    HAVING COUNT(*) > 2 
    ) p3 
    on dp.parcel = p3.parcel 
where CAST(replace(replace(ifnull(due,0),',',''),'$','') AS decimal(10,2)) > 0 
order by parcel; 
+0

我想你應該加入'ON dp.parcel = p3.parcel' –

+0

@Declan_K。 。 。謝謝。 –

+0

這似乎不起作用,出於某種原因,連接包括帶有零到期的記錄,並且似乎沒有按包裹排序。哦,我不得不在COUNT(*)> 2上添加一個'*',否則我得到一個語法錯誤。返回的記錄數量從幾百到幾千(即使所有五年都不爲零,我也不會得到那麼多記錄)。我不確定我是否明白爲什麼加入會這樣做,因爲您的建議有意義? –

相關問題