2013-06-03 3 views
0

Я пытаюсь создать запрос, который выберет несколько столбцов (uniqueID, IPaddress, date, country), но я бы хотел, чтобы запрос был выбран только для тех записей, где появился тот же IPaddress и 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 

EDIT: неправильно ваш с различным IP-адреса части, обновляется.

Подзапрос покажет вам все записи, которые имеют несколько IP-адресов для одного и того же уникального идентификатора/даты, а затем присоединение к этой таблице истории показывает все поля для записей, которые вы после.

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 действительно нужно uniqueid в предложении group 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

@ пользователь2386810. , , В этом случае тройной 'uniqueId, IPAddress, date' никогда не появляется дважды в данных. Как хранится дата? Возможно, вам придется изменить 'date' на' date (date) ', чтобы избавиться от любого элемента времени на нем. –

Смежные вопросы