按两个不同表中的时间戳和名称查询订单

时间:2013-02-18 15:09:43

标签: sql sql-server sql-server-2008r2-express

注意:我对SQL Server有点新,所以这应该是一个简单的问题,我为格式化这个问题时的错误道歉。

这是SQL Server 2008 R2。

我有两张桌子。

  • 表1:DATA包含密钥ID和列PROD_ID, COLLECT_TS

  • 表2:PRODUCT包含密钥PROD_ID和列PROD_NAME

我希望我的查询按最新的PROD_NAME

列出每个COLLECT_TS

这是我到目前为止所做的:

SELECT MAX(COLLECT_TS), PROD_ID
FROM dbo.SG_DATA
GROUP by PROD_ID

这会成功返回带有COLLECT_TS的所有最新PROD_ID,但PROD_ID只是一个数字,对用户没有任何意义。

提前感谢您的回答。

3 个答案:

答案 0 :(得分:1)

Select max(p.prod_name) as prod_name, max(d.collect_ts) as collect_ts
From product p
Join data d -- left join if you want products with no data
    On d.prod_id = p.prod_id
Group by p.prod_id

我们的想法是加入产品和数据,这样我们就可以为每个数据条目提供一行,并附带附加产品的额外信息。然后我们按产品ID分组并从每个组中获取最大收集ts。我们也采用最大名称,但这没关系,因为名称在整个组中是不变的,所以我们只需要一些聚合来选择单个值。

答案 1 :(得分:1)

您需要加入两个表,然后按COLLECT_TS列排序:

Select TB2.PROD_NAME , TB1.COLLECT_TS  From [Table_1] as TB1
Join [Table_2] as TB2 on TB1.PROD_ID = TB2.TB1.PROD_ID 
Order by TB1.COLLECT_TS desc

答案 2 :(得分:0)

SELECT MAX(COLLECT_TS), MAX(PROD_NAME)
FROM dbo.SG_DATA a
inner join dbo.PRODUCT b on a.prod_id = b.prod_id
GROUP by PROD_ID