【问题标题】:ms access how to get first and last one in the same categoryms访问如何获得同一类别中的第一个和最后一个
【发布时间】:2021-07-19 08:04:56
【问题描述】:

我有一张很大的汽车行程表(行程名称、经过的城市以及进出时间。表格是这样的:

id city1 time1 city2 time2 city3 time3 city4 time4 city5 time5
01 bous 11:00 bouh 11:10 bir 11:15 chl 11:30 tns 11:45
01 fok 00:00 dwa 00:10 zer 00:20 CDP 11:30 CHRG 11:35

每个城市都来自一个州。我有第二张这样的桌子:

city state
bous state1
bouh state1
fok state1
dwa state1
bir state1
chl state2
tns state2
zer state3
CDP state3
CHRG state3

我想要的是获取每次旅行进入某个状态的时间和退出时间,例如旅行 1:

id state entry time exit time state entry time exit time
01 state1 11:00 11:15 state2 11:30 11:45

【问题讨论】:

  • Access SQL 提供了 first 和 last 聚合函数来返回组中的第一个和最后一个值。
  • @NicholasHunter 解释更多关于访问和 sql 的 iam 新手
  • @NicholasHunter 很好,这个函数垂直搜索我想水平搜索,而且我不会得到所有的 ghe 状态,而不仅仅是第一个
  • 数据结构未规范化。这可能需要用于水平搜索的自定义 VBA 函数。为什么行程 1 和状态 1 的退出时间不是 11:45? fok 和 dwa 处于什么状态?展开数据样本和输出示例。你显示时间,但日期呢?

标签: sql vba database ms-access


【解决方案1】:

看看这是否能让你接近你想要的。表 1 必须有一个唯一的标识符字段 - 应该提供自动编号。此外,时间字段是日期/时间类型,包含完整的日期和时间值。

表 1:行程详情
字段:ID_PK、TripID_FK、City1、Time1 等

查询 1:TripUNION
从一个 UNION 查询开始,该查询将数据重新排列为更规范化的结构。

SELECT ID_PK, TripID_FK, city1 AS City, time1 AS Tme FROM TripDetails
UNION SELECT ID_PK, TripID_FK, city2, time2 FROM TripDetails
UNION SELECT ID_PK, TripID_FK, city3, time3 FROM TripDetails
UNION SELECT ID_PK, TripID_FK, city4, time4 FROM TripDetails
UNION SELECT ID_PK, TripID_FK, city5, time5 FROM TripDetails
ORDER BY TripID_FK, Tme;

UNION 限制为 50 条 SELECT 行,因此请继续为其他城市和时间对添加 SELECT 行。 UNION 没有设计器 - 必须在 SQLView 中键入或复制/粘贴。

Query2:将 TripUNION 查询连接到 Cities 表以进行聚合查询:

SELECT TripUNION.TripID_FK, TripUNION.ID_PK, Cities.state, 
       Min(TripUNION.Tme) AS Enter, Max(TripUNION.Tme) AS Exit
FROM TripUNION INNER JOIN Cities ON TripUNION.City = Cities.city
GROUP BY TripUNION.ID_PK, TripUNION.TripID_FK, Cities.state;

但是,如果重新进入同一记录上的某个状态,则输出很可能不是预期的。此外,如果行程有多个仅涉及 1 个状态的记录,则可能的输出将再次不是所需的。由于您的数据没有显示任何一种情况,这确实会为给定样本产生所需的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2015-08-20
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多