5

我今天从这里得到了解决问题的好方向,但我一直试图遵循这个方向。

我想使用我count的过去从表中检索所有行的. 我使用这些字段填充这些字段,它们的格式为.30 daysdate fieldnow()Y-m-d h:i:s

  • 我需要一个count用于今天、昨天、3 天前添加的行...等
  • 我想我可以使用上面的方法来计算每个月的数量?
  • 最后一个count使用月份作为总月份的一年,前一年等?

我希望不在我的查询中指定日期,并且查询只是通用的并计算出相对于今天的计数。我也希望通过考虑不同的月份有不同的天数,我也能准确地做到这一点。

我怎样才能只count使用SQL得到这个?然后我可以将结果集用作数组并使用PHP.

4

5 回答 5

9

昨天插入的记录数:

select count(*) from mytable where date(myfield)=date(date_sub(now(),interval 1 day));

年度:

select count(*) from mytable where year(myfield)=year(now());

等等...

于 2009-03-04T16:46:16.310 回答
2

查看 MySQL 的DATE_ADDDATE_SUB函数,它将为您提供所需的内容。

于 2009-03-04T16:42:15.070 回答
2

我不完全确定您的数据库结构是什么样的,但您可能可以使用以下方法实现您想要的GROUP BY

按天汇总:

SELECT date(my_date_field) d, count(*) c FROM tbl
GROUP BY d
ORDER BY d

按月汇总:

SELECT year(my_date_field) y, month(my_date_field) m, count(*) c FROM tbl
GROUP BY y, m
ORDER BY y, m

要按年份聚合,您可以简单地从上面的示例中删除月份参数。

如果你想得到limit具体的结果,你可以WHERE直接在 d、ymy_date_fieldHAVINGm 上使用。用于DATE_SUB计算相对于当前日期的日期。

于 2009-03-04T16:45:37.323 回答
0

查看 DATEDIFF ...我不确定 mysql 的确切语法,但它最终应该类似于:

select * from Table WHERE datediff(StartDate, Today) < DaySpan
于 2009-03-04T16:45:04.800 回答
0

根据按日期、月份和年份分组尝试此解决方案:

-- Testing data
DECLARE @TestTable TABLE(ID INT, AddDate DATETIME)
INSERT INTO @TestTable
SELECT 1, '2009-03-04 14:58:01' UNION
SELECT 1, '2009-05-14 14:58:01' UNION
SELECT 1, '2009-05-14 14:58:02' UNION
SELECT 1, '2009-05-24 14:58:01' UNION
SELECT 1, '2009-05-24 14:58:02' UNION
SELECT 1, '2009-05-24 14:58:03' UNION
SELECT 1, '2009-07-04 14:58:01' UNION
SELECT 1, '2009-09-04 14:58:01' UNION
SELECT 1, '2010-01-04 14:58:01' UNION
SELECT 1, '2010-03-04 14:58:01' UNION
SELECT 1, '2010-03-04 14:58:02'

-- MySQL Answer
-- for each day
SELECT EXTRACT(YEAR_MONTH_DAY, AddDate), COUNT(ID) FROM @TestTable
GROUP BY EXTRACT(YEAR_MONTH_DAY, AddDate)
-- for each month
SELECT EXTRACT(YEAR_MONTH, AddDate), COUNT(ID) FROM @TestTable
GROUP BY EXTRACT(YEAR_MONTH, AddDate)
-- for each year
SELECT EXTRACT(YEAR, AddDate), COUNT(ID) FROM @TestTable
GROUP BY EXTRACT(YEAR, AddDate)

-- SQL Answer
-- for each day
SELECT dateadd(day, datediff(day, 0, AddDate)+0, 0), COUNT(ID) 
FROM @TestTable
GROUP BY dateadd(day, datediff(day, 0, AddDate)+0, 0)
-- for each month
SELECT dateadd(month, datediff(month, 0, AddDate)+0, 0), COUNT(ID) 
FROM @TestTable
GROUP BY dateadd(month, datediff(month, 0, AddDate)+0, 0)
-- for each year
SELECT dateadd(year, datediff(year, 0, AddDate)+0, 0), COUNT(ID) 
FROM @TestTable
GROUP BY dateadd(year, datediff(year, 0, AddDate)+0, 0)
于 2009-03-04T17:04:33.737 回答