我会尽我最大的努力来解释这件事,如果我的解释有点尴尬,我会提前道歉。如果我在某个地方有雾,请告诉我什么能帮你。
我有一张满是电路和日期的桌子。每个电路在大约36个月或48个月的时间周期内进行调整。我有一篇专栏文章给了我这个信息。我有一个记录,每次一个电路的修剪周期已经完成。我试图链接一个已知的电路中断列表,与一个表与他们的中断数据,与一个表与电路的修剪历史。扭转情况如下:
我只想要回电路,已经超过了他们的修剪周期6个月。因此,我需要为一个电路提取所有记录,查看每条单独的记录,查找与当前正在检查的记录相关的最新记录(我将需要每条记录单独检查),计算两个记录在几个月内的差异,然后只返回一个给定馈线的两个条目之间超过6个月差的记录。
以下是数据的一个示例:
+----+--------+----------+-------+
| 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个月的周期):
+----+--------+----------+-------+
| ID | feeder | comp | cycle |
| 3 | 123456 | 7/1/2007 | 36 |
| 4 | 123456 | 3/1/2011 | 36 |
+----+--------+----------+-------+这是我开始的查询,但我很难确定如何正确计算日期:
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,所以我想感谢你们大家的耐心和你们愿意提供的任何帮助。
发布于 2016-08-19 17:23:10
我做了一些假设,但这使用一个子查询在支线列表中给出行,在这些行中,上一个完成日期大于周期所指示的数月前的数目:
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更改为只循环。
发布于 2016-08-19 17:30:10
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的超过循环时间的记录,但正如注释中所指出的,我不完全确定这是否是您所需要的,也不确定如何合并其他两个表。一旦你看到它在做什么,你就可以修改它,只保留你需要的记录。
https://stackoverflow.com/questions/39043919
复制相似问题