2013-12-23 42 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