2013-10-06 34 views
0

一个观点我有两个表:使得从SQL数据库

1. Products with the following columns: 
* ID 
* SerialNumber 
* Name 
2. ProductsData 
* ID 
* ProductID 
* DateOfData 
* DataValue 

我想用视图:

* Product name. 
* product serial number 
* the last date of data for this product. 
* the data value in this datetime 

如何做呢,通过SQL查询来进行查看?

感谢

+0

我试着用innerjoin的东西,但它在第二个表中返回所有行。我只想要最后一个数据 – user1902346

+0

@ user1902346下一次,将您的问题与您的问题一起发布,这样人们就会知道您在询问之前需要付出一些努力。这通常会带来更多的答案和更少的问题。 –

回答

1
CREATE VIEW vw_SomeName 
AS 
SELECT P.Name, P.SerialNumber, PD.DataValue, MAX(PD.DateOfData) 
FROM Products P INNER JOIN ProductsData PD 
ON P.ID = PD.ProductID 
GROUP BY P.Name, P.SerialNumber, PD.DataValue 

或者你可以试试这个藏汉

CREATE VIEW vw_SomeName 
    AS 
    SELECT P.Name, P.SerialNumber, PD.DataValue, LastDate 
    FROM Products P 
        CROSS APPLY (
           SELECT TOP 1 PD.DataValue, MAX(PD.DateOfData) AS LastDate 
           FROM ProductsData PD 
           WHERE P.ID = PD.ProductID 
           GROUP BY PD.DataValue 
           ORDER BY LastDate DESC 
           ) PD 
+0

谢谢。我该如何获得该日期的DataValue? – user1902346

+0

我编辑了代码看看请:) –

+1

谢谢,但第二个是语法错误,第一次返回mee所有行中的产品数据中的日期 – user1902346

0

试试这个

SELECT Name, SerialNumber, ABB3.last_date, ABB3.DataValue 
FROM Products AS ABB4 
    LEFT JOIN 
     (SELECT ABB2.ProductID, last_date, DataValue 
     FROM ProductsData AS ABB2 
      LEFT JOIN 
      (SELECT ProductID, MAX(DateOfData) AS last_date 
      FROM ProductsData 
      GROUP BY ProductID) AS ABB1 ON ABB1.ProductID = ABB2.ProductID 
      AND ABB1.last_date = ABB2.DateOfData) 
     AS ABB3 ON ABB3.ProductId = ABB4.ID