2014-06-13 59 views
0

我有以下的SQL不適用於where條件。MySQL的派生最大功能列添加條件

SELECT t.PROJID,sum(t.UNITS) AS totalunits, sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` 
left join projects on projects.PROJID = t.PROJID 
where lastupdated LIKE '%2014-06-11%' 
GROUP BY t.PROJID 

回答

1

您不應在日期使用like。正確的解決方案是簡單地截斷日期並進行比較。但是,您需要使用數據的字段:

SELECT t.PROJID, sum(t.UNITS) AS totalunits, 
     sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` left join 
    projects on projects.PROJID = t.PROJID 
where date(t.date) = date('2014-06-11') 
GROUP BY t.PROJID; 

或者,如果你有lastupdated索引,使用範圍允許使用索引:

SELECT t.PROJID, sum(t.UNITS) AS totalunits, 
     sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` left join 
    projects on projects.PROJID = t.PROJID 
where t.date >= date('2014-06-11') and t.date < date('2014-06-12') 
GROUP BY t.PROJID; 

你真的有可能想要使用having,這是使用列別名而不是基列建議的。在這種情況下:

SELECT t.PROJID, sum(t.UNITS) AS totalunits, 
     sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` left join 
    projects on projects.PROJID = t.PROJID 
GROUP BY t.PROJID 
HAVING date(lastupdated) = date('2014-06-11'); 
+0

你從哪裏得到這個價值日期? – shorif2000

+0

什麼日期值? –

+0

我用過,現在感謝 – shorif2000

0

像永遠不能用於日期字段。 如果您將類型更改爲vachar,則可以使用

+0

爲什麼LIKE不能與日期字段一起使用? – Strawberry

+0

你可以在<>之間使用,>,<等等永遠不會被推薦。 –

+0

'永遠不會被推薦'與'永遠不會'非常不同,不是嗎?例如「LIKE'2014-06%'」很好,或許不如「BETWEEN x AND y」快,但如果有可用的話,它將使用索引! – Strawberry