2013-06-03 50 views
0

我想製作一個查詢,將選擇多個列(uniqueID,IP地址,日期,國家),但我希望查詢只選擇那些相同的IP地址和UniqueID顯示的記錄在給定的一天。我一直試圖...選擇列

SELECT uniqueID AS uniqueID, 
IPAddress AS IPAddr, 
Date AS DDate, 
Location AS Countries, 
COUNT(IPAddress) AS IPCount 
FROM History WHERE (uniqueID= 20677) 
GROUP BY Date 
ORDER BY DDate DESC, IPAddr DESC 

但它確實消除了只有一個Ip/UniqueID出現在一天的記錄。我真的只是想找到記錄中,其中UNIQUEID出現了對不同IPaddresses同一天。

回答

0

不知道如果我照做,但聽起來像你想加入一個子查詢:

SELECT a.* 
FROM History a 
JOIN ( SELECT uniqueID, Date, COUNT(DISTINCT IPAddress) 
     FROM History 
     GROUP BY uniqueID,Date 
     HAVING COUNT(DISTINCT IPAddress) > 1 
    )b 
ON a.uniqueID = b.uniqueID 
AND a.date = b.date 

編輯:用不同的IP地址的一部分誤解你,更新。

子查詢將顯示具有多個IP地址的所有記錄,以獲得相同的唯一ID /日期,然後將其加入到歷史記錄表中,顯示所有記錄的字段。

0

你需要按三個字段,如果你正在尋找重複他們當中:

SELECT uniqueID, IPAddress, "Date" AS DDate, Location AS Countries, 
     COUNT(IPAddress) AS IPCount 
FROM History 
WHERE uniqueID = 20677 
GROUP BY uniqueId, IPAddress, "Date" 
having IPCount > 1; 

你dn't真的需要uniqueidgroup by子句中,因爲你只選擇一個。但是,我認爲這使查詢的意圖更加清晰。如上所述,這將產生錯誤(因爲location不在聚合子句中),或者爲location返回一個隨機值,如果您使用的是MySQL)。如果是後者,請嘗試:

SELECT uniqueID, IPAddress, "Date" AS DDate, 
     group_concat(Location) AS Countries, 
     COUNT(IPAddress) AS IPCount 
FROM History 
WHERE uniqueID = 20677 
GROUP BY uniqueId, IPAddress, "Date" 
having IPCount > 1; 

此外,數據類型和功能後命名的列是不是好主意。在許多數據庫中,date既是數據類型又是函數。其他一些名字,像DateAdded避免這種衝突。

+0

這個解決方案似乎不工作。 「有」節導致沒有記錄被返回,註釋掉「有」節返回的是行,但不是我正在尋找的。 – user2386810

+0

@ user2386810。 。 。在這種情況下,三重'uniqueId,IPAddress,date'永遠不會在數據中出現兩次。日期如何存儲?您可能需要將'date'更改爲'date(date)'以除去其上的任何時間元素。 –