首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access查询:通过扭曲获取日期的差异

Access查询:通过扭曲获取日期的差异
EN

Stack Overflow用户
提问于 2016-08-19 16:35:35
回答 2查看 77关注 0票数 1

我会尽我最大的努力来解释这件事,如果我的解释有点尴尬,我会提前道歉。如果我在某个地方有雾,请告诉我什么能帮你。

我有一张满是电路和日期的桌子。每个电路在大约36个月或48个月的时间周期内进行调整。我有一篇专栏文章给了我这个信息。我有一个记录,每次一个电路的修剪周期已经完成。我试图链接一个已知的电路中断列表,与一个表与他们的中断数据,与一个表与电路的修剪历史。扭转情况如下:

我只想要回电路,已经超过了他们的修剪周期6个月。因此,我需要为一个电路提取所有记录,查看每条单独的记录,查找与当前正在检查的记录相关的最新记录(我将需要每条记录单独检查),计算两个记录在几个月内的差异,然后只返回一个给定馈线的两个条目之间超过6个月差的记录。

以下是数据的一个示例:

代码语言:javascript
复制
+----+--------+----------+-------+
| ID | feeder | comp     | cycle |
| 1  | 123456 | 1/1/2001 | 36    |
| 2  | 123456 | 1/1/2004 | 36    |
| 3  | 123456 | 7/1/2007 | 36    |
| 4  | 123456 | 3/1/2011 | 36    |
| 5  | 123456 | 1/1/2014 | 36    |
+----+--------+----------+-------+

下面是我想要的结果集的一个例子(-请注意,:循环可能因电路而异,因此在计算中需要计算循环列中的值,以确定是否在修边之间超出了6个月的周期):

代码语言:javascript
复制
+----+--------+----------+-------+
| ID | feeder | comp     | cycle |
| 3  | 123456 | 7/1/2007 | 36    |
| 4  | 123456 | 3/1/2011 | 36    |
+----+--------+----------+-------+

这是我开始的查询,但我很难确定如何正确计算日期:

代码语言:javascript
复制
SELECT temp_feederList.Feeder, Temp_outagesInfo.causeType, Temp_outagesInfo.StormNameThunder, Temp_outagesInfo.deviceGroup, Temp_outagesInfo.beginTime, tbl_Trim_History.COMP, tbl_Trim_History.CYCLE

FROM (temp_feederList 

LEFT JOIN Temp_outagesInfo ON temp_feederList.Feeder = Temp_outagesInfo.Feeder) 

LEFT JOIN tbl_Trim_History ON Temp_outagesInfo.Feeder = tbl_Trim_History.CIRCUIT_ID;

我真的不知道我需要从这里去哪里得到最近的条目,并进行数学比较。我从来没有被要求做这个复杂的SQL,所以我想感谢你们大家的耐心和你们愿意提供的任何帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-19 17:23:10

我做了一些假设,但这使用一个子查询在支线列表中给出行,在这些行中,上一个完成日期大于周期所指示的数月前的数目:

代码语言:javascript
复制
SELECT tbl_Trim_History.ID, tbl_Trim_History.feeder,
   tbl_Trim_History.comp, tbl_Trim_History.cycle
FROM tbl_Trim_History
WHERE tbl_Trim_History.comp>
   (SELECT Max(DateAdd("m", tbl_Trim_History.cycle, comp)) 
    FROM tbl_Trim_History T2 
    WHERE T2.feeder = tbl_Trim_History.feeder AND 
      T2.comp < tbl_Trim_History.comp)

如果需要检查超过36个月,可以将任意值添加到DateAdd函数计算的月份中。

而且,我不知道周期的值是指定了从前一个周期到下一个周期的月数,还是指定了下一个周期的月数。如果是后者,我会将DateAdd函数中的DateAdd更改为只循环。

票数 2
EN

Stack Overflow用户

发布于 2016-08-19 17:30:10

代码语言:javascript
复制
SELECT tbl_trim_history.ID, tbl_trim_history.Feeder,
  tbl_trim_history.Comp, tbl_trim_history.Cycle, 
  (select max(comp) from tbl_trim_history T 
   where T.feeder=tbl_trim_history.feeder and
      t.comp<tbl_trim_history.comp) AS PriorComp, 
  IIf(DateDiff("m",[priorcomp],[comp])>36,"x") AS [Select]
FROM tbl_trim_history;

该查询(在最后一列中使用X)标识来自tbl_trim_history的超过循环时间的记录,但正如注释中所指出的,我不完全确定这是否是您所需要的,也不确定如何合并其他两个表。一旦你看到它在做什么,你就可以修改它,只保留你需要的记录。

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

https://stackoverflow.com/questions/39043919

复制
相关文章

相似问题

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