Sql 从两个不同的表按时间戳和名称进行订单查询

Sql 从两个不同的表按时间戳和名称进行订单查询,sql,sql-server,sql-server-2008r2-express,Sql,Sql Server,Sql Server 2008r2 Express,注意:我对SQL Server有点陌生,所以这应该是一个简单的问题,我为这个问题的格式错误道歉 这是SQLServer2008R2 我有两张桌子 表1:DATA具有键ID和列PROD\u ID,COLLECT\u TS 表2:PRODUCT具有键PROD\u ID和列PROD\u NAME 我希望我的查询按最新的COLLECT\TS列出每个PROD\u NAME 以下是我迄今为止所做的: SELECT MAX(COLLECT_TS), PROD_ID FROM dbo.SG_DATA GRO

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

这是SQLServer2008R2

我有两张桌子

  • 表1:
    DATA
    具有键
    ID
    和列
    PROD\u ID,COLLECT\u TS

  • 表2:
    PRODUCT
    具有键
    PROD\u ID
    和列
    PROD\u NAME

我希望我的查询按最新的
COLLECT\TS
列出每个
PROD\u NAME

以下是我迄今为止所做的:

SELECT MAX(COLLECT_TS), PROD_ID
FROM dbo.SG_DATA
GROUP by PROD_ID
这将成功返回所有最新的
COLLECT\t
,并带有
PROD\u ID
,但是
PROD\u ID
只是一个数字,对用户来说没有任何意义

提前感谢您的回答

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。我们也使用max name,但这没关系,因为name在整个组中都是常量,所以我们只需要一些聚合来选择单个值。

您需要连接两个表,然后按COLLECT\TS列排序:

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
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

正是我需要的!非常感谢你。我知道它相当简单,只是需要正确的格式。再次感谢所有的帮助!