使用SQL访问数据源以显示每个站点的最新条目

时间:2013-07-23 14:24:26

标签: sql ms-access

首先,我是SQL的完全初学者,并且已经深入了解了一下!我正在学习,因为我所犯的每一个错误或者我提出的问题都希望能帮助我发展...请善待:)

我有一个工作查询,提取电表读数和其他信息。我找到了每个网站的最新阅读材料。这是目前的查询:

PARAMETERS [Site Group] Text ( 255 );
SELECT 
Lookup.Lookup_Name AS [Group], 
Contacts.Name AS Site, 
Points.Number AS MPAN, 
Max(DataElectricity.Date) AS MaxDate, 
DataElectricity.M1_Present, 
DataElectricity.M2_Present, 
DataElectricity.M3_Present, 
DataElectricity.M4_Present, 
DataElectricity.M5_Present, 
DataElectricity.M6_Present, 
DataElectricity.M7_Present, 
DataElectricity.M8_Present,
DataElectricity.Direct
FROM 
DataElectricity INNER JOIN (Lookup INNER JOIN (Points INNER JOIN Contacts ON Points.Contacts_Id = Contacts.Id) ON Lookup.Lookup_Id = Contacts.Group_1) ON DataElectricity.Point_Id = Points.Id
WHERE
((DataElectricity.Direct)='D')
GROUP BY 
Lookup.Lookup_Name, Contacts.Name, Points.Number, DataElectricity.M1_Present, DataElectricity.M2_Present, DataElectricity.M3_Present, DataElectricity.M4_Present, DataElectricity.M5_Present, DataElectricity.M6_Present, DataElectricity.M7_Present, DataElectricity.M8_Present, DataElectricity.Direct
ORDER BY 
Lookup.Lookup_Name, Contacts.Name, Max(DataElectricity.Date) DESC;

然而,这会返回网站的所有读数,而不仅仅是最新的......我确信这很简单,但我无法理解。

感激地收到任何建议或指导:)

2 个答案:

答案 0 :(得分:1)

难道你不能只使用前1来获得第一个结果吗?

SELECT top 1 ... 

答案 1 :(得分:1)

我使用caspian对SELECT top 1的建议进一步改进了代码......但我正在努力进一步改进它并产生我需要的结果。

    PARAMETERS [Site Group] Text ( 255 );
    SELECT 
    Lookup.Lookup_Name, 
    Contacts.Name AS Site, 
    Points.Number AS MPAN, 
    DataElectricity.M1_Present, 
    DataElectricity.M2_Present, 
    DataElectricity.M3_Present, 
    DataElectricity.M4_Present, 
    DataElectricity.M5_Present, 
    DataElectricity.M6_Present, 
    DataElectricity.M7_Present, 
    DataElectricity.M8_Present,
    DataElectricity.Direct

    FROM 
    (
    SELECT TOP 1 DataElectricity.Date AS MaxDate, 
            DataElectricity.M1_Present, 
            DataElectricity.M2_Present, 
            DataElectricity.M3_Present, 
            DataElectricity.M4_Present, 
            DataElectricity.M5_Present, 
            DataElectricity.M6_Present, 
            DataElectricity.M7_Present, 
            DataElectricity.M8_Present,
            DataElectricity.Point_id
    FROM 
    DataElectricity 
    ORDER BY MaxDate DESC
    )

    DataElectricity INNER JOIN (Lookup INNER JOIN (Points INNER JOIN Contacts ON Points.Contacts_Id = Contacts.Id) ON Lookup.Lookup_Id = Contacts.Group_1) ON DataElectricity.Point_Id = Points.Id
    WHERE 
    ((Lookup.Lookup_Name)=Lookup_Name) 
    ORDER BY 
    Lookup.Lookup_Name, Contacts.Name, MaxDate DESC;

我确实有一个Google云端硬盘文件,其中显示了数据表和所需结果的一个小例子,并提供了关于表格如何连接的明确指南。

https://docs.google.com/file/d/0BybrcUCD29TxWVRsV1VtTm1Bems/edit?usp=sharing

实际数据包含数百个网站组,每个网站组可能有数百个网站。

我希望我的最终用户能够从Lookup.Lookup_Name列表中选择站点组名称,并返回所有相关站点和读数。

....我真的希望这是有道理的!