2012-09-03 16 views
1

我創建了一個表4列和排序上一大量數據ID內創建:SQL,連接表本身,爲了通過一定的時間跨度

 ID   Type    Item    Date 
    AU761201  12.37.47   121212322  2012-07-12 22:21:12 
    AU761201  12.37.42   157856388  2012-05-12 23:21:05 
    AU761201  12.37.42   164687782  2009-02-12 12:37:24 
    BD871015  15.31.62   651564488  2007-10-25 15:12:23 
    DU551023  19.35.14   048040408  2011-11-05 14:15:23 
    DU551023  19.35.14   056505654  2011-11-04 23:23:23 
     .    .    .     . 
     .    .    .     . 
     .    .    .     . 
     .    .    .     . 
     .    .    .     . 

我想要做的是檢查是否任何「身份證」在24小時的時間範圍內(在給定的例子中爲DU 551023)已經購買了兩個相同的商品(相同的「類型」號碼)並且對其適用的ID進行分類。

我的大腦目前正在處理這個索姆出血所有的幫助深表感謝。

謝謝!

+0

對於該數據庫,你需要這個查詢?你已經提到了其中兩個。 – hgulyan

回答

0

首先,您需要在此表中有一個唯一的鍵(區分記錄)。假設它是Item(否則在T1.Item!= T2.Item中改變它)。

select distinct T1.ID from Table T1, Table T2 
where T1.ID = T2.ID and T1.Type = T2.Type 
    and Abs(T1.Date - T2.Date) < 1 and T1.Item != T2.Item 
order by T1.ID 
2

對於MySQL的

SELECT T1.id 
FROM TableName T1 INNER JOIN TableName T2 
    ON T1.id = T2.id AND T1.Type = T2.Type AND T1.Item > T2.Item 
WHERE ABS(HOUR(TIMEDIFF(T1.date, T2.date))) <= 24 

對於SQL服務器

SELECT T1.id 
FROM TableName T1 INNER JOIN TableName T2 
    ON T1.id = T2.id AND T1.Type = T2.Type AND T1.Item > T2.Item 
WHERE ABS(DATEDIFF(hh, T1.date, T2.date)) <= 24 
0

如果SQL服務器,那麼你可以用存在

SELECT DISTINCT 
    a.ID 
FROM MyTable AS a 
WHERE EXISTS (SELECT 1 
      FROM MyTable AS b 
      WHERE a.ID = b.ID 
        AND a.TYPE = b.Type 
        AND ABS(DATEDIFF(hour, a.Date, b.Date)) <= 24) 
ORDER BY a.ID 
做到這一點

,或者您可以使用加入

SELECT DISTINCT a.ID 
FROM MyTable AS a 
INNER JOIN MyTable AS b 
ON a.ID=b.ID AND a.TYPE=b.Type 
WHERE ABS(DATEDIFF (hour , a.Date , b.Date))<=24 
ORDER BY a.ID 
+0

沒有找到函數DATEDIFF或TIMEDIFF似乎有問題? – user1644501