我有一個奇怪的邏輯問題,我似乎無法將我的頭圍繞起來(可能是因爲研究它太久了)。Access中的日期範圍處理邏輯
我在哪裏工作,我們有一個非常老的軟件,我們需要使用它來跟蹤我們使用的設備的狀態。該軟件提供了很少的功能來操縱這些狀態,以嘗試並提供停機時間的良好分析。我一直在研究Access中的數據庫應用程序(因爲它是他們提供給我的唯一工具),可以將舊系統的狀態數據導入更容易操作的格式。
狀態數據從舊的計劃吐出的方法是相當直接:
EQUIPNAME狀態的startDateTime ENDDATETIME
這是很容易閱讀的文本,並將其插入到表中的訪問。我遇到的問題來自於試圖找出一件設備在不同日期範圍內處於不同狀態所花費的時間。
開始/結束日期/時間可以是任何時間長度。找到哪些行包含日期很困難。我一直在使用語句間的SQL,試圖找到他們其中,在大多數情況下,工作進行的順利:
SELECT * FROM Statuses WHERE
(StartDateTime BETWEEN [StartDT] AND [EndDT])
OR
(EndDateTime BETWEEN [StartDT] AND [EndDT])
真正的問題是,當的startDateTime是BEFORE StartDT和EndDateTime之後EndDT(即整我期待的範圍是INSIDE這個狀態的開始/結束日期)。它根本找不到它,這是有道理的。
我似乎無法想出一個優雅的解決方案。我需要能夠選擇包含或包含在提供的日期範圍內的狀態的所有行。我通常不會來這裏這樣一個簡單的問題,但我的大腦和谷歌福正在讓我失望。
樣本數據的一點點:
EQUIP STATUS STARTDATETIME ENDDATETIME
A123 OPER 01/30/2013 21:30 12/31/1999 00:00
A123 DFM 01/26/2013 10:42 01/30/2013 21:29
A123 OPER 01/01/2013 00:00 01/26/2013 10:41
B123 OPER 01/01/2013 00:00 12/31/1999 00:00
C123 DFU 01/29/2013 12:31 12/31/1999 00:00
C123 OPER 01/01/2013 00:00 01/29/2013 12:30
我懷疑你可能被UDF誤引了。你能發佈樣本數據嗎? – Fionnuala
你是什麼意思?數據很簡單,日期時間格式如下:2013/1/31 12:34 –
我的意思是可能有一個解決方案使用更多的SQL和更少的UDF。示例數據將包括說明狀態更改的幾行。 – Fionnuala