2010-02-08 52 views
1

我的公司需要編寫一個查詢,以確定何時輸入的數據不準確。我們在我們的數據庫中有一個名爲「ProductChanges」的表格。它看起來(東西)這樣的 -SQL:查詢返回不準確的數據輸入

Product User  ChangeDate   OldValue  NewValue 
2344  John  24/01/10 10:00   2344   4324 
6435  Greg  28/01/10 13:30   543   6435 
6532  Tony  29/01/10 09:45  <NULL>   234 

的OldValue時爲<NULL>,這意味着它是一個新的產品記錄。我們預計在創建記錄的第一個小時內會發生一些更改,因爲所有數據都會更新。但之後的任何更改都被認爲意味着最初的記錄不準確。

SO ...我想要的是一個查詢,它返回在上個月創建的所有產品記錄,這些記錄在創建初始記錄後一小時內記錄了任何後續更改。對於輸出,我們希望初始記錄加上所有後續更改。例如。 -

Product User  ChangeDate   OldValue  NewValue 
6532  Tony  29/01/10 09:45  <NULL>   234 
6532  Fred  01/02/10 11:37   234   4324 

在此先感謝!

更新:我們正在運行SQL Server上這個數據庫2000

回答

1

看起來很簡單,如果我理解正確的 - 剛剛拿到入學日期,與比發生更多的任何變化加入小時後。

SELECT pc.Product, pc.User, pc.ChangeDate, pc.OldValue, pc.NewValue 
FROM 
(
    SELECT Product, ChangeDate AS EntryDate 
    FROM ProductChanges 
    WHERE OldValue IS NULL 
) e 
INNER JOIN ProductChanges pc 
    ON pc.Product = e.Product 
WHERE EXISTS 
(
    SELECT 1 
    FROM ProductChanges 
    WHERE Product = e.Product 
    AND ChangeDate > DATEADD(HOUR, 1, e.EntryDate) 
) 
AND e.EntryDate >= @BeginDate 
AND e.EntryDate <= @EndDate 

我們只需要在第二個連接,因爲你提到你想爲所有的「問題」組的整個歷史;如果您只需要這些ID,則可以通過取消中間連接並僅選擇e.Product來使此查詢更有效。

+0

啊應該指定 - 我正在使用SQL Server 2000,所以不能使用... – 2010-02-08 03:40:02

+1

啊,沒問題,我會讓它成爲你的子查詢。 – Aaronaught 2010-02-08 03:41:30

+0

乾杯隊友,優秀 – 2010-02-08 03:51:18

0
select * from pc where product in (select distinct a.product from pc a, pc b 
where a.product = b.product and a.changedate > dateadd(hh, 1, b.changedate)) 
order by product, changedate