2013-12-23 3 views
1

У меня есть две таблицы: «Идентификатор» имеет идентификатор первичного ключа с цифрами 1-9, а другой («Просмотр») имеет поле aa, которое использует один из идентификационных номеров в каждая запись - некоторые цифры могут использоваться несколько раз, например 4 может быть в двух записях. При просмотре также есть поле даты для каждой записи.SQL-запрос - нужно добавить самую последнюю дату

У меня есть запрос, который подсчитывает количество раз, которое имеет значение в таблице представлений, и возвращает таблицу с идентификатором из таблицы свойств и сколько раз этот идентификатор появляется в поле в таблице «Просмотры».

То, что я пытаюсь сделать сейчас, - добавить дату для каждой из строк. Трудная часть состоит в том, что, поскольку некоторые записи будут иметь номер 4 дважды, например, будут две разные даты. Я хочу иметь возможность выбрать самую последнюю дату и сделать ее отображаемой в качестве третьего столбца в моем запросе.

меня это до сих пор считать ID, но я пытаюсь добавить дату, а:

SELECT Property.ID, 
Count(Viewings.Property_Viewed) AS ViewingCount 
FROM Property LEFT JOIN Viewings ON Property.ID = Viewings.Property_Viewed 
GROUP BY Property.ID; 

Вот моя попытка добавления дата-который не является полным:

SELECT Property.ID, Viewings.Viewing_Date, 
Count(Viewings.Property_Viewed) AS ViewingCount, 
MAX(Viewings.Viewing_Date) AS Vdate 
FROM Property LEFT JOIN Viewings ON Property.ID = Viewings.Property_Viewed 
GROUP BY Property.ID; 
+0

Покажите нам пример того, где выполняется второй запрос. – user2989408

+0

@ user2989408 Я не знаю, как связать дату с остальной частью запроса. Например, у меня есть Proporty.ID, связанный с Viewings.Propoerty_Viewed. – al3

ответ

0

Моя догадка, вам нужно только удалить Viewings.Viewing_Date из пункта SELECT для того, чтобы получить результат, который вы хотите.

SELECT 
    Property.ID, 
    Count(Viewings.Property_Viewed) AS ViewingCount, 
    MAX(Viewings.Viewing_Date) AS Vdate 
FROM 
    Property 
    LEFT JOIN Viewings 
    ON Property.ID = Viewings.Property_Viewed 
GROUP BY Property.ID; 

Этих результирующий набор должны включать в себя строку для каждого Property.ID с подсчетом просмотров за это свойство и датой последнего просмотра. Столбец даты будет содержать null для любых свойств, не найденных в таблице Viewings.

Проблема с Viewings.Viewing_Date в пункте SELECT это не является ни ...

  1. выражение поля на основе суммарной функции (кол-, мин, не более, и т.д.)
  2. включены в GROUP BY статья

Доступ, как правило, возникает, когда встречается выражение поля, которое не удовлетворяет ни одному из этих условий.

+0

WOW это было так просто ..? хаха спасибо! – al3

1

Я бы рекомендовал отдельно строить каждый запрос отдельно, а затем объединить их обратно в таблицу свойств.

Так что вы могли бы сделать что-то вроде:

SELECT 
    P.Id AS PropertyId 
    VC.ViewingCount, 
    VD.LastViewing 
FROM Property P 
LEFT JOIN 
( 
    SELECT 
     Property_Viewed AS PropertyId 
     Count(Viewings.Property_Viewed) AS ViewingCount 
    FROM Viewings 
    GROUP BY Property_Viewed 
) AS VC ON P.Id = VC.PropertyId 
LEFT JOIN 
(
    SELECT 
     Property_Viewed AS PropertyId 
     MAX(Viewings.Viewing_Date) AS LastViewing 
    FROM Viewings 
    GROUP BY Property_Viewed 
) AS VD ON P.Id = VD.PropertyId 
Смежные вопросы