MS Access分组查询跨越开始和结束日期

时间:2014-02-26 20:24:52

标签: sql ms-access

我想知道每个月,每年按月租用多少小部件的运行记录。数据保存在MS Access 2003 db;

  • 表名:rent_table
  • 字段:
    • rentid
    • STARTDATE
    • 结束日期
    • rentfee
    • rentcost
    • bookingfee

喜欢的东西;计算月/年之间的rentid数量,然后将它们分组?

e.g。如果从2014年1月5日到2014年4月8日租用小部件,它将在1月,2月,3月和4月的计数中显示为计数。

非常感谢。

修改

更多细节(抱歉);

  1. Access db面向经典ASP。
  2. 如果可能,我不想创建任何新表。
  3. 无需输入即可运行报告。
  4. 任何时候都可以租用大约350-400个小部件。
  5. 每个小部件都是专门租用的。
  6. 报告输出示例;

    • 月|年| NumRented
    • Jan 2014 86
    • 2014年2月113
    • ...
  7. 查询可以在日期内选择日期吗?所以从字面上算一下这个表的日期> 2013年12月31日和2014年2月1日(为了获得2014年1月全部的计数),那将包括从1月5日开始的租金的例子吗?所以我每年可以做十二次计数?

1 个答案:

答案 0 :(得分:0)

  1. 创建一个日历表,例如 table = cal_yyyymm,其中一列dt_yyyymm为数字字段

  2. 用...填充表格,说5年或10年的数据 201401 201402 201403 ... 60或120行,小表

  3. 制作一个sql

    Select
        dt_yyyymm,
        count(*) as cnt
    
    From  cal_yyyymm
    
    Left Join  rent_table
        On  format(startdate,"yyyymm") >= dt_yyyymm
        And dt_yyyymm  >= format(enddate,"yyyymm")
    
  4. 考虑数据的复杂性 - -

    小部件于2014年1月5日至2014年1月8日租用 并于2014年1月11日至2014年1月21日再次租用 这个月的数量是1还是2?

    如果是1,则sq​​l变得更复杂,因为 rent_table首先需要转换日期 到yyyymm格式,第二个需要在rentid上去掉, 然后第三次加入cal_在日期......