我在MSaccess中有下面的表,我需要通过连接2列进行分组,并在某个日期/时间范围内给出重复的计数,如果可能的话,还需要类型和城市,但这不是强制性的。
LocationX LocationY DateTimeStamp, City Type
100 150 08/01/2013 8:59:44 Brisbane RadioJob
101 155 08/01/2013 9:56:01 Brisbane RadioJob
100 150 08/01/2013 8:49:39 Brisbane RadioJob
103 150 08/01/2013 8:55:13 Brisbane RadioJob我需要将第0列和第1列连接在一起并进行计数,但仅选择特定时间范围内的位置。
因此,例如,如果我在2018/01/2013 8:49:00和08/01/2013 8:59:59之间进行选择,则会得到下表:
LocationX LocationY CountOfLocation City Type
100 150 2 Brisbane RadioJob
103 150 1 Brisbane RadioJob现在,我用设计视图在MSaccess中写了两个查询来让它工作,但我想尝试并学习如何在一条SQL语句中做到这一点。
提前谢谢你,
麦克
发布于 2013-01-08 08:06:30
SELECT LocationX, LocationY, City, Type, COUNT(*) CountOfLocation
FROM tableName
WHERE DateTimeStamp BETWEEN '2013-08-01 8:49:00' AND '2013-08-01 8:59:59'
GROUP BY LocationX, LocationY, City, Type更新
SELECT LocationX, LocationY, City, Type, COUNT(*) AS CountOfLocation
FROM tableName
WHERE DateTimeStamp BETWEEN #2013-08-01 08:49:00# AND #2013-08-01 08:59:59#
GROUP BY LocationX, LocationY, City, Type发布于 2013-01-08 08:06:48
SELECT
L.LocationX,
L.LocationY,
Count(*) AS CountOfLocation,
L.City,
L.Type
FROM
Locations L
WHERE
DateTimeStamp >= #08/01/2013 08:49:00#
AND DateTimeStamp < #08/01/2013 09:00:00#
GROUP BY
L.LocationX,
L.LocationY,
L.City,
L.Type;我想指出的是,我从使用BETWEEN到不等式的改变是经过深思熟虑的。原因是使用BETWEEN要求底层的date数据类型具有特定的分辨率或粒度(这里是秒)。但是假设您的数据库在某一天增长并升级到SQL Server。在解决了诸如日期字面量之类的明显问题之后,在转换为datetime数据类型时将会潜伏着一个令人讨厌的小陷阱:突然间,介于秒之间的值将成为可能,并且数据将被错误地排除。
我的专业建议是在所有数据库查询中始终如一地使用我的查询中所示的语法:包含性开始时间和独占结束时间。考虑到学习最佳实践习惯在任何DBMS中都能很好地服务于您……
此外,虽然Access中的日期文本确实需要#包装器,但您可以选择在数据库级别选择SQL-Server兼容语法,然后使用'。实际上,我推荐这种转换,因为它的语法不那么古怪,而且在升迁场景中,由于要做的工作要少得多,这将是一个巨大的福音。但是如果你现在改变,你现有的查询将不得不立即修复。
https://stackoverflow.com/questions/14206236
复制相似问题