我在MS Access中有两个表,一个日期只有几个月和几年的列表,例如:
MonthNumber YearNumber
1 2013
2 2013
3 2013
第二个表是 Bedfile ,其中列出了客户名称代码,日期,月份和年份,例如:
Namecode Date Month Year
Bob 1/1/2013 1 2013
Joe 1/1/2013 1 2013
Bob 1/2/2013 1 2013
Joe 1/2/2013 1 2013
Eric 1/2/2013 1 2013
Bob 2/15/2013 2 2013
Joe 2/16/2013 2 2013
Bob 2/1/2014 2 2014
Joe 2/1/2014 2 2014
我目前正在尝试进行查询,以计算之前十二个月的不同名称代码,例如:
MonthResults YearResults CountResults
1 2013 3
2 2013 3
2 2014 2
这将是一个滚动查询,这意味着结果列将显示在12个月之前找到的名称代码的数量。
SELECT
dates.monthnumber,
dates.yearnumber,
(
SELECT Count(a.namecode)
FROM
(SELECT DISTINCT bedfile.namecode FROM BEDFILE
WHERE bedfile.date
BETWEEN dateserial(dates.yearnumber-1, dates.monthnumber, datepart("d", bedfile.date))
AND dateserial(dates.yearnumber, dates.monthnumber, datepart("d", bedfile.date))
) as a
)
FROM dates
GROUP BY dates.yearnumber, dates.monthnumber
当我运行它时,它会问我date.yearnumber和date.monthnumer是什么。如果我输入数字(分别是2013年和1),它只给我一个月的独特数量。
SELECT Count(a.namecode), dates.monthnumber, dates.yearnumber
FROM
(SELECT DISTINCT bedfile.namecode, bedfile.month, bedfile.year
FROM BEDFILE
WHERE bedfile.date
BETWEEN dateadd("yyyy", -1, bedfile.date) and bedfile.date
) AS a
INNER JOIN dates
ON (a.month=dates.monthnumber) AND (a.year=dates.yearnumber)
GROUP BY dates.yearnumber, dates.monthnumber;
第二个查询给了我不同的计数,但仅限于每个月,而不是前一个12的总和。
有谁知道如何帮助我创造我正在寻找的东西?甚至可以在Access SQL查询中使用吗?
答案 0 :(得分:0)
SELECT
first_date,
second_date,
COUNT(name) as num_distinct,
name
FROM(
SELECT
DISTINCT b.namecode AS name,
b.date AS first_date,
DateAdd("yyyy",-1,[b.date]) AS second_date
FROM bedfile b
WHERE b.date BETWEEN DateAdd("yyyy",-1,[b.date]) AND b.date
)
GROUP BY name
不确定这是否正确,因为我从未使用MS Access SQL,但看起来这样可行
编辑:
你说这个查询
SELECT Count(a.namecode), dates.monthnumber, dates.yearnumber
FROM
(SELECT DISTINCT bedfile.namecode, bedfile.month, bedfile.year
FROM BEDFILE
WHERE bedfile.date
BETWEEN dateadd("yyyy", -1, bedfile.date) and bedfile.date
) AS a
INNER JOIN dates
ON (a.month=dates.monthnumber) AND (a.year=dates.yearnumber)
GROUP BY dates.yearnumber, dates.monthnumber;
每月返回不同的计数,所以为什么不用另一个选择包含计数的SUM()的选项来包装它以获得每年的总和? 您可以做的另一件事是删除GROUP BY dates.monthnumber ....因为这将按月拆分数据而不是显示一年。
我建议按年分组,因为它更少编写sql并且更易于阅读。