0

我想将此查询合并为一个,以按日期返回 2 个值(“scount_atp”,其中 estado=1 和“scount_xxx”,其中 estado=4):

SELECT DATE_FORMAT(FROM_UNIXTIME(fecha),"%m-%d-%Y") as sdate, COUNT(id) as scount_atp FROM entradas WHERE estado = '1' AND fecha <= UNIX_TIMESTAMP(NOW()) AND fecha >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR)) GROUP BY sdate

SELECT DATE_FORMAT(FROM_UNIXTIME(fecha),"%m-%d-%Y") as sdate, COUNT(id) as scount_xxx FROM entradas WHERE estado = '4' AND fecha <= UNIX_TIMESTAMP(NOW()) AND fecha >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR)) GROUP BY sdate

我是 MySQL 的新手,所以如果这太基本了,我很抱歉......

谢谢大家的帮助!

4

2 回答 2

4
SELECT 
  DATE_FORMAT(FROM_UNIXTIME(fecha),"%m-%d-%Y") as sdate, 
  SUM(IF(estado = '1',1,0)) as scount_atp,
  SUM(IF(estado = '4',1,0)) as scount_xxx
FROM entradas 
WHERE estado IN('1','4')
  AND fecha <= UNIX_TIMESTAMP(NOW()) 
  AND fecha >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR)) 
GROUP BY sdate

让我在这里添加一个不相关的东西:如果该estado列是 type INT,您可能想要编写1而不是'1'- 或者您可能以全表扫描结束,将 int 列转换为字符串以进行比较。

于 2012-06-26T13:57:27.473 回答
2

我过去做过类似的事情,这对我有用:

SELECT 
   DATE_FORMAT(FROM_UNIXTIME(fecha),"%m-%d-%Y") as sdate, 
   COUNT(IF(estado = '1', 1, NULL)) as scount_atp, 
   COUNT(IF(estado = '4', 1, NULL)) as scount_xxx 
FROM entradas 
WHERE 
   fecha <= UNIX_TIMESTAMP(NOW()) 
   AND 
   fecha >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR))
GROUP BY sdate
于 2012-06-26T14:01:33.883 回答