从sql数据库创建视图[关闭]
Posted
技术标签:
【中文标题】从sql数据库创建视图[关闭]【英文标题】:making a view from sql database [closed] 【发布时间】:2013-10-06 10:58:42 【问题描述】:我有两张桌子:
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 查询来制作视图?
谢谢
【问题讨论】:
我尝试了使用 innerjoin 的方法,但它返回了第二个表中的所有行。我只想要最后的数据 @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
【讨论】:
谢谢。我如何获得该日期的 DataValue ? 我已经编辑了代码,请看一下:) 谢谢,但第二个是语法错误,第一个返回到产品数据中包含日期的所有行 对不起,当您不在 sql server 上并且只在您的脑海中进行查询时,很难在您的脑海中描绘整个查询:) 现在看看我已经编辑了它,希望它应该可以正常工作现在好了。 它有效。伟大的。如果可能的话,我还有另一个问题 :) :我想在产品线中写下过去 24 小时内的平均值(另一列)。有办法吗?【参考方案2】:试试这个
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
【讨论】:
以上是关于从sql数据库创建视图[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
sql server 创建视图添加表时出现从其他数据库导入的表未显示出来