2013-12-23 54 views
1

我有兩個表,一個是'Property'有一個數字1-9的主鍵ID,另一個('查看')有一個字段,使用其中一個ID號每個記錄 - 一些數字可能會多次使用,例如4可能在兩個記錄。在查看中,每個記錄還有一個日期字段。SQL查詢 - 需要添加最近的日期

我有一個查詢,它計數查看錶中的值出現的次數,並返回一個數據表,其中包含來自Property表中的ID以及查看錶中該字段中出現該ID的次數。

我現在要做的是爲每個行追加日期。困難的部分是,因爲有些記錄會有兩次例如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

我最好的猜測是,你只需要從SELECT子句中,爲了得到你想要的結果刪除Viewings.Viewing_Date

所以就像你會做一些事情。

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與收看該屬性的數量和最近的收視之日起一行。對於Viewings表中找不到的任何屬性,日期列將包含空值。

SELECT子句中與Viewings.Viewing_Date的問題是它既不...

  1. 基於集合函數字段表達式(計數,最小值,最大值等)
  2. 包括在GROUP BY子句

訪問通常在遇到不滿足任一條件的字段表達式時發出抱怨。

+0

哇,這是簡單的..?哈哈謝謝你! – 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