现有两个日期控件: DTPicker1和DTPicker2。用户可选择两个日期-起始日期与终止日期,我想统计这两个日期之间的每各个月份的记录总数。比如用户在DTPicker1选择的是2005-01-20,在DTPicker2选择的是2005-05-10,那么我想分另统计02月,03月,04月,至05月的记录总数,并分别符给N变量。请那个高手帮助,谢谢。

解决方案 »

  1.   

    可以用 Rs.RecordCount,即你检索后的记录集啊.
      

  2.   

    mndsoft(枕善居主) 你用的Rs.RecordCount只是检索02-05月所有的记录集,而我想要的是根据用户输入我两个日期,取其中两个日期的月份,分别检索出02,03,04,05的记录!!!
      

  3.   

    用SQL语句!"Select * From [Table] Where [Moth=2  or Moth=3... or Month=5]"
      

  4.   

    一个简单的例子:(access)SELECT Count(留言本.id) AS id之Count,  Str(Year([留言本].[dates]))+"-"+Str(Month([留言本].[dates]))
    FROM 留言本
    GROUP BY Str(Year([留言本].[dates]))+"-"+Str(Month([留言本].[dates]));sqlserver中同理。。
      

  5.   

    哦,漏了时间限定:一个简单的例子:(access)查询2002-12-20至2003-5-21期间各月的记录总数。。:SELECT Count(留言本.id) AS id之Count, Str(Year([留言本].[dates]))+"-"+Str(Month([留言本].[dates])) AS 表达式1
    FROM 留言本
    WHERE (((留言本.dates)>#12/20/2002#) AND ((留言本.dates)<#5/21/2003#))
    GROUP BY Str(Year([留言本].[dates]))+"-"+Str(Month([留言本].[dates]));sqlserver中同理。。
      

  6.   

    我用来测试的表叫“留言本”,id、dates是里面的一个字段,id只是用来计数,无关紧要的,你可以选别的字段,而dates就是表里存放日期的字段了,通用点应该是这样:SELECT Count(id) AS 总数, Str(Year([留言本].[dates]))+Str(Month([留言本].[dates])) AS 年、月
    FROM yourtable
    WHERE (((dates)>#12/20/2002#) AND ((dates)<#5/21/2003#))
    GROUP BY Str(Year(dates))+Str(Month(dates))where子句不用说了吧,group by子句是先把日期字段做处理,提取其年份和月份合起来然后作为统计的汇总条件把年份也提取出来作为条件,是怕你选的期限跨年度,例如你选的日期是2001-2-3至2005-1-6,如果只对月份汇总,就会把不同年份但同月份的数据都算在一起了(例如2001年6月份、2002年6月份、2003、2004的六月份都通通加在一起了)...
    上面我在年月之间加了一个"-"号只是为了好看一点,没有什么实际作用的,删去也行。
      

  7.   

    SELECT Count(id) AS 总数, Str(Year(dates))+Str(Month(dates)) AS 年、月
    FROM yourtable
    WHERE (((dates)>#12/20/2002#) AND ((dates)<#5/21/2003#))
    GROUP BY Str(Year(dates))+Str(Month(dates));
      

  8.   

    lsftest() 的对以时间为条件
    以月分组
    求汇总结果
      

  9.   

    SELECT Count(id) AS 总数, Str(Year(dates))+Str(Month(dates)) AS 年、月
    这as年、月是什么意思?
    为什么我贴到VB里却说我的"缺少:Case!"
      

  10.   

    这样写
    SELECT Count(id) AS 总数, Str(Year(dates))+Str(Month(dates)) AS 年、月
    FROM yourtable
    WHERE (((dates)>#12/20/2002#) AND ((dates)<#5/21/2003#))
    GROUP BY Str(Year(dates))+Str(Month(dates));问题依然没有解决!!!
      

  11.   

    Dim i As Integer
    Dim N() As Integer
    Dim Count As Integer
    Dim Date1 As Date
    Dim date2 As Date
    Date1=Format(DTPicker1.value,"yyyy-mm-dd")
    Date2=Format(DTPicker2.value,"yyyy-mm-dd")
    Count=DateDiff("m",Date1,Date2)+1
    ReDim N(Count)
    For i=1 To Count
        Rs.Open "Select Count(*) As NumberCount From Table_Name Where " & _ 
                "Year(Date_Field)=" & Year(DateAdd("m",i-1,Date1)) & _ 
                " And Month(Date_Field)=" & Month(DateAdd("m",i-1,Date1)),Conn,3,1
        If Not Rs.Eof Or Not Rs.Bof Then
           N(i)=Rs("NumberCount")
        Else
           N(i)=0
        End If
        Rs.Close
    Next
      

  12.   

    lsftest() 不是已经给你写出来了啊?
      

  13.   

    lsftest() 是写出来了,但我老运行不通啊,而且我也看得不明白!!
      

  14.   

    Zygodactyous(Zygodactylous) 写的我看明白了,而且也运行通了!!谢谢各位的帮忙!
      

  15.   

    不是吧,一句sql可以完成的事倒用起了循环真是简单问题复杂化。
    我写的是sql查询语句,可以直接在access里运行,但不能在vb里直接用的。