标签: ms-access

Access (Jet) SQL:表 B 中的日期时间戳位于表 A 中的每个日期时间戳的两侧

第一句话

如果您只是想破解代码,您可以放心地忽略以下(包括)JOINs:Starting Off 部分。的背景结果只是作为背景。如果您想查看代码最初的样子,请查看 2015-10-06 之前的编辑历史记录。


客观的

最终,我想根据表中可用 GPS 数据的日期时间戳计算发射机(XXmit)的内插 GPS 坐标,这些数据SecondTable直接位于表中的观测值的两侧FirstTable

我的近期目标实现的最终目标是要弄清楚如何最好地加入FirstTableSecondTable得到这些侧翼的时间点。稍后我可以使用该信息我可以计算中间 GPS 坐标,假设沿等距柱状坐标系进行线性拟合(花哨的话说我不在乎地球是这个比例的球体)。


问题

  1. 有没有更有效的方法来生成最接近的前后时间戳?
    • 我自己通过抓取“之后”来修复,然后仅获取与“之后”相关的“之前”。
  2. 有没有更直观的方式不涉及(A<>B OR A=B)结构。
    • Byrdzeye提供了基本的替代方案,但是我的“现实世界”经验与他的所有 4 个加入策略的表现都不一致。但是完全归功于他解决了替代连接样式。
  3. 您可能有的任何其他想法、技巧和建议。
    • 到目前为止,byrdzeyePhrancis在这方面都非常有帮助。我发现Phrancis 的建议非常好,并在关键阶段提供了帮助,所以我会在这里给他优势。

对于问题 3,我仍然希望得到任何额外的帮助。 要点反映了我认为在个别问题上对我帮助最大的人。


表定义

半视觉表现

第一表

Fields
  RecTStamp | DateTime  --can contain milliseconds via VBA code (see Ref 1) 
  ReceivID  | LONG
  XmitID    | …
Run Code Online (Sandbox Code Playgroud)

join ms-access aggregate datetime

21
推荐指数
2
解决办法
646
查看次数

MS Access 中的完全外部联接

我有两个员工名单:

List A:

StaffID   Supervisor
====================
0001234         NULL
0001235      0001234
0001237      0001234
0001239      0001237
Run Code Online (Sandbox Code Playgroud)

List B:

StaffID   Supervisor
====================
0001234         NULL
0001235      0001234
0001238      0001235
0001239      0001235
Run Code Online (Sandbox Code Playgroud)

我需要以下输出:

StaffID   SupervisorA   SupervisorB
===================================
0001234          NULL          NULL
0001235       0001234       0001234
0001237       0001234          NULL
0001238          NULL       0001235
0001239       0001237       0001235
Run Code Online (Sandbox Code Playgroud)

请注意,列表 A 和列表 B 中的员工 ID 已合并到一个不重复的列表中,并且我已合并了两个列表之间可能不匹配的两个主管详细信息。

查询不必很好。我在每个列表中有大约 8000 条记录,我会很好地运行它。如有必要,我很乐意在之后进行一些小的 Excel 操作。

我想做一个完整的联接,但联接上的 Access 查询设计器属性窗口允许我从表 A 中选择 ALL 并从表 B 中进行匹配、从表 B 中选择 ALL 并从表 A 中进行匹配,或者仅选择在两个 A 中都匹配的那些和 B。

我确信这很简单,但我很少使用 MS …

join ms-access query

11
推荐指数
1
解决办法
4万
查看次数

为什么 suser_name() 不会反映 AD 帐户名称更改?

我们的一个用户的名称已合法更改,因此我们更改了他们的 Active Directory 用户名以匹配 - 从域\旧名称到域\新名称。但是,当此用户在存储过程中调用 suser_sname() 时,它返回旧名称,而不是新名称。

谷歌搜索让我找到了KB 946358,这表明他们的名字被缓存在服务器上并且没有更新,大概是因为 suser_name() 正在调用 LsaLookupSids。但是,该文章中的解决方法涉及重新启动服务器,即使是这样,我仍然想了解问题所在。

如果我将上下文更改为他们的上下文,则会返回正确的名称:

EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name()   --returns 'domain\newname'
Run Code Online (Sandbox Code Playgroud)

...我会假设这也会调用 LsaLookupSids,因此会返回不正确的名称。我似乎不太了解这里的工作机制。

一些可能重要的观察结果:

  • 此用户在服务器上没有显式登录。但他们是这样做的 AD 组的成员。更改后的名称 (domain\newname) 出现在结果集中exec xp_logininfo 'domain\ADGroupName', 'members';域\旧名称没有。

  • 用户从存储过程中调用 suser_name(),从 Access 2003 MDB 中的直通查询调用。

  • 过去我们更改了大量用户的帐户名称,但仅在上周才发现此问题(上周进行了两次更改,似乎都出现了此问题)。

  • 服务器在 Windows 2008 R2 数据中心版上运行 Sql Server 2008 SP3 x64。

这是怎么回事?作为 DBA,我可以做什么或者我可以在哪里解决这个问题?

sql-server-2008 ms-access sql-server active-directory

10
推荐指数
1
解决办法
1248
查看次数

查询最佳匹配项并对其进行排序

我正在尝试按照以下方式编写查询:

select * 
from tbl 
where 
       col1 = 1 
   and col2 = 2 
   and col3 = 3
order by
   ...
;
Run Code Online (Sandbox Code Playgroud)

我首先想要所有 3 个WHERE条件匹配的所有结果(3/3),然后是任何 2 个条件匹配的所有结果(2/3),最后是任何 1 个条件匹配的结果(1/3)。

这 3 个结果集中的每一个都需要按 排序(col4, col5, col6)

我可以在单个查询中做到这一点吗?

例如:

示例 http://img708.imageshack.us/img708/1646/sampletableresult1.jpg

创建测试数据的脚本:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') AND type in (N'U'))
    DROP TABLE [dbo].[MyTable]
GO

CREATE TABLE dbo.MyTable
(
    col1 INT
    , col2 INT 
    , col3 INT 
    , col4 INT 
    , col5 INT 
    , …
Run Code Online (Sandbox Code Playgroud)

ms-access query order-by

9
推荐指数
1
解决办法
3543
查看次数

开始使用包含真实数据的数据库的最简单方法是什么?

我有一个可以从使用数据库中受益的项目,但我没有使用数据库的经验,无法访问服务器,并且在服务器端处理事物的经验相对较少。

如果我必须解决学习曲线问题,我更愿意学习具有广泛适用性的东西(例如 SQL),但如果它对我目前正在尝试的任务足够强大,我会选择学习诸如 Access 之类的东西处理。当然,如果可以提供帮助,我也不想在 Access 上花费 150 美元,因为我只是在修修补补。

我已经下载了 LibreOffice Base 以及名为 SQLiteBrowser 的东西,但是在我投入时间学习这些特定应用程序及其 SQL 风格之前,我想先检查一下这些工具是否足以满足我的需求。

我希望能够:

  • 从 CSV 或 Excel 导入数据
  • 运行等同于“选择 x,其中这是那个,这包含那个,其中任何一个都包含那个”的查询
  • write(?) 一个新字段,指示与给定查询匹配的那些结果

再说一次,我愿意学习,但在我可以专注于学习数据库以及(如有必要)给定应用程序的细节之前,不必学习一堆关于 IT 的中级知识会很好。

ms-access database-recommendation

9
推荐指数
2
解决办法
4万
查看次数

从 MS Access 编程转向 SQL Server 时的主要考虑因素

我是一个 100% 自学的 MS Access 程序员(我工作的主要部分是编程),我现在正在构建更大的数据库;仍然使用 MS Access 作为 UI,但使用 SQL Server 来存储所有数据并完成更多“工作”。

本质上我的问题是;对于 SQL Server,我需要了解哪些在使用 Access 时我可能没有学习或不需要的主题?

不是找你告诉我怎么做,更多的是你认为最重要的事情我应该去研究——有很多科目和很多细节,不想找自己长沿着一条不那么有价值的道路走下去......

脑残粉:

  • 维护:什么是最重要的(检查数据库,减少数据库,更新统计信息,重建等)
  • 索引 - 我不知道多少,有没有一本好书/博客等可以教我向上的基础知识?
  • 我错过的其他任何东西(可能有很多,因为我说我是 SQL Server 的新手......)

如果它有助于我为一家中型零售商工作,而我主要工作的数据库涵盖以下内容:

  • 报表平台(从主系统汇总销售/收货/库存等并提供快速报表)
  • 第三方与我们的商店通过寄存器放置的内容之间的协调工具(从第三方导入数据并交叉引用交易日志)
  • 存储与我们的促销活动有关的所有数据;产品、价格、预测、实际结果等

sql-server-2005 ms-access

9
推荐指数
1
解决办法
5551
查看次数

如何在表级别记录 Access 中的数据更改?

我支持非营利组织的 Access 数据库。我们有一些关于数据神秘变化的问题,并且有一些,嗯,友好的辩论,关于这是否是由不是最懂计算机的用户引起的,还是由我的一些后台处理引起的。

我已经在 UI 级别为这些条件添加了一些检查,但我想在数据库表级别进行一些检查,以便在某些字段更改时进行记录。通过这种方式,我将了解更改是由用户发起还是仅来自在后台运行的更新查询。通常我会使用on update触发器,但据我所知 Access 不支持触​​发器。Access 中是否还有其他日志记录或类似触发器的功能?

trigger ms-access

8
推荐指数
1
解决办法
5031
查看次数

我可以自动收到 SQL 服务器中长时间阻塞的通知吗?

大约每周一次,我必须解决 SQL Server 2005 数据库上的阻塞链,这是由 Access 2003 前端的长期读取锁引起的。每当用户打开某个表单时就会解除锁定,并在用户完成滚动表单或关闭表单后解除锁定。由于我们的许多用户打开此表单作为参考,因此这些锁会保留一段时间。对该表的任何更新都会导致阻塞,突然间没有人可以从该表中进行选择,因为他们都在等待第一个锁。这对我们来说是一个很大的问题,因为许多应用程序都依赖于这些数据。我知道这种锁定行为是 Access 如何处理链接表的一部分。

我一直在通过 Activity Monitor 解决这个问题,只要我发现它,就会杀死任何一个是 Head Blocker 的 SELECT 进程。这是一个问题,不仅因为我手动完成它需要时间,还因为它是被动的。当我听说它时,它已经成为很多人的问题。

我想知道是否有一种自动方法来检查这些持久的阻塞链,并通过电子邮件发送或自动解决问题。逻辑看起来很简单(“如果任何与此 SELECT 查询匹配的进程阻塞了超过一分钟,请通知我/杀死它”)但我不知道如何使用 SQL Server 实现这一点。

对于它的价值,我认为正确的解决方案是修复或重写应用程序。然而,由于部门政治,这不是未来几个月的选择,所以我正在寻找一个权宜之计。

ms-access sql-server locking

8
推荐指数
2
解决办法
1万
查看次数

在不访问源数据的情况下规范数据库?

我开始了一个处理大量相关数据的新角色。我们所有这些数据的来源是从我们无法访问的数据库中提取的各种 Excel 转储。之前担任此角色的人员使用了十几个 Excel 文件来收集这些数据文件、处理它们并创建报告。

我已经开始将转储移动到 Access 数据库。我注意到很多 Excel 数据是相关的,可能应该被标准化。我目前所做的是为每个数据转储创建一个表,并将它们导入 Access,并使用大量查询来复制数十种数据操作和报告。

在我的唯一来源是从仓库中转储的 Excel 数据的情况下,规范化数据是否仍然有好处?

当我无法更改转储发送给我的格式时,我将如何规范化数据?

此外,我的计划(取决于预算)是从 Access 转移到 MS SQL 数据库。

ms-access

8
推荐指数
1
解决办法
1223
查看次数

SQL 查询仅显示单个食品的最近购买记录

我正在使用 MS Access 2013 中的食品采购/发票系统,并尝试创建一个 SQL 查询,该查询将返回每个单独食品的最新购买价格。

这是我正在使用的表的图表: MS Access 数据库中的表

我对 SQL 的理解是非常基本的,我尝试了以下(不正确的)查询,希望它只返回每个项目的一条记录(因为DISTINCT运算符)并且它只会返回最近购买的(因为我做了ORDER BY [Invoice Date] DESC)

SELECT DISTINCT ([Food items].Item), 
    [Food items].Item, [Food purchase data].[Price per unit], [Food purchase data].[Purchase unit], Invoices.[Invoice Date]
FROM Invoices
INNER JOIN ([Food items] 
    INNER JOIN [Food purchase data] 
    ON [Food items].ID = [Food purchase data].[Food item ID]) 
ON Invoices.ID = [Food purchase data].[Invoice ID]
ORDER BY Invoices.[Invoice Date] DESC;
Run Code Online (Sandbox Code Playgroud)

然而,上面的查询只是返回所有的食品购买(即 中每个记录的多条记录[Food items]),结果按日期降序排序。有人可以向我解释我对DISTINCT运营商的误解吗?也就是说,为什么它不只为 中的每个项目返回一条记录[Food items]

更重要的是 …

join ms-access sorting date distinct

8
推荐指数
1
解决办法
2万
查看次数