我有一个包含应用程序的表格,当联系他们时,“已联系”列标记为“1”。如果可能的话,我想做的是计算有多少结果是 3 天前的,有多少是 4-6 天前的,有多少是 7 天或以上的。这可以在单个查询中实现吗?
__________________________________
| Name | Contacted | Date |
----------------------------------
| Bob | 1 | 2016-09-16 |
| Ben | 1 | 2016-10-03 |
| Sam | 1 | 2016-10-03 |
编辑:
使用以下内容:
SELECT
case
when datediff( CURDATE(), `submission_date`) = 3 then '3 Days'
when datediff( CURDATE(), `submission_date`) between 4 and 6 then '4-6 Days'
when datediff( CURDATE(), `submission_date`) > 6 then '7 or more days'
end as `days`,
sum( case
when datediff( CURDATE(), `submission_date`) = 3 then 1
when datediff( CURDATE(), `submission_date`) between 4 and 6 then 1
when datediff( CURDATE(), `submission_date`) > 6 then 1
else 0
end ) as tot
FROM my_table
GROUP BY
case
when datediff( CURDATE(), `submission_date`) = 3 then '3 Days'
when datediff( CURDATE(), `submission_date`) between 4 and 6 then '4-6 Days'
when datediff( CURDATE(),`submission_date`) > 6 then '7 or more days'
end ;
然后
echo '<p>'.$row['tot'].'</p>';
我得到:
0
1
最佳答案
您可以使用选择案例和分组依据
select
case
when datediff( CURDATE(), `date`) <= 3 then '3 Days'
when datediff( CURDATE(), `date`) between 4 and 6 then '4-6 Days'
when datediff( CURDATE(), `date`) > 6 then '7 or more days'
end as `days`,
sum( case
when datediff( CURDATE(), `date`) <= 3 then 1
when datediff( CURDATE(), `date`) between 4 and 6 then 1
when datediff( CURDATE(), `date`) > 6 then 1
else 0
end ) as tot
from my_table
where contacted = 1
group by
case
when datediff( CURDATE(), `date`) <= 3 then '3 Days'
when datediff( CURDATE(), `date`) between 4 and 6 then '4-6 Days'
when datediff( CURDATE(),`date`) > 6 then '7 or more days'
end ;
在 my_result
列中,您应该找到所需的字符串
select concat( 'You have *** ', sum( case
when datediff( CURDATE(), `date`) <= 3 then 1
when datediff( CURDATE(), `date`) between 4 and 6 then 1
when datediff( CURDATE(), `date`) > 6 then 1
else 0
end ), ' *** New Items more than ' ,
case
when datediff( CURDATE(), `date`) <= 3 then '3 Days old'
when datediff( CURDATE(), `date`) between 4 and 6 then '4-6 Days'
when datediff( CURDATE(), `date`) > 6 then '7 or more days'
end ) as my_result
from my_table
where contacted = 1
group by
case
when datediff( CURDATE(), `date`) <= 3 then '3 Days'
when datediff( CURDATE(), `date`) between 4 and 6 then '4-6 Days'
when datediff( CURDATE(),`date`) > 6 then '7 or more days'
end ;
关于php - 按 "x Days Old"列出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837207/