计算今天,昨天......以及其他时间添加的行数

时间:2009-03-04 16:37:44

标签: sql mysql

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

我想使用我的日期字段检索过去30天内表格中所有行的计数。我使用“now()”填充这些字段,格式为“2009-03-04 14:58:01”。

  • 我需要计算添加的行数 今天,昨天,3天前......等等。
  • 我想我可以使用上面的内容 得到每个月的计数?
  • 最后计算一年,一年 在使用月份作为总数之前?

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

如何使用只是SQL 来获取此数量?然后我可以将结果集用作数组并使用PHP解析它。

5 个答案:

答案 0 :(得分:7)

昨天插入的记录数:

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

今年:

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

等等......

答案 1 :(得分:2)

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

答案 2 :(得分: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

要按年汇总,您只需从上面的示例中删除月份参数即可。

如果要将结果限制为细节,可以直接在my_date_field上使用WHERE,或者在d,y或m上使用HAVING。使用DATE_SUB计算相对于当前的日期。

答案 3 :(得分:0)

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

select * from Table WHERE datediff(StartDate, Today) < DaySpan

答案 4 :(得分: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)