首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我有一个表,我需要对某个日期范围内的2列进行分组和计数

我有一个表,我需要对某个日期范围内的2列进行分组和计数
EN

Stack Overflow用户
提问于 2013-01-08 08:04:20
回答 2查看 91关注 0票数 1

我在MSaccess中有下面的表,我需要通过连接2列进行分组,并在某个日期/时间范围内给出重复的计数,如果可能的话,还需要类型和城市,但这不是强制性的。

代码语言:javascript
运行
复制
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之间进行选择,则会得到下表:

代码语言:javascript
运行
复制
LocationX LocationY CountOfLocation  City      Type
100       150       2                Brisbane  RadioJob
103       150       1                Brisbane  RadioJob

现在,我用设计视图在MSaccess中写了两个查询来让它工作,但我想尝试并学习如何在一条SQL语句中做到这一点。

提前谢谢你,

麦克

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-08 08:06:30

代码语言:javascript
运行
复制
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

  • SQLFiddle Demo Link

更新

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2013-01-08 08:06:48

代码语言:javascript
运行
复制
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兼容语法,然后使用'。实际上,我推荐这种转换,因为它的语法不那么古怪,而且在升迁场景中,由于要做的工作要少得多,这将是一个巨大的福音。但是如果你现在改变,你现有的查询将不得不立即修复。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14206236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档