sql 联合查询筛选结果的问题

qxkls 2009-08-10 05:00:22
SELECT a.Tname, a.DataId,b.DataValue
FROM Temperature a INNER JOIN
HistoryData b ON a.DataId = b.DataId order by b.dataid desc

编号 值 名称
A1 10 采集器2
A1 11 采集器2
A1 12 采集器2
B1 90.0 采集器1

我想改变一下语句

使结果成为

编号 值 名称

A1 12 采集器2

B1 90.0 采集器1
也就是说取相同编号的最后一条记录

...全文
134 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mbh0210 2009-08-10
  • 打赏
  • 举报
回复
靠。细看还少了一个from

SELECT a.Tname, a.DataId,b.DataValue,
FROM Temperature a
INNER JOIN HistoryData b ON a.DataId = b.DataId
inner join
select DataId,max(日期字段) as 日期字段 from HistoryData
group by DataId)c on c.DataId = b.DataId and c.日期字段 = b.日期字段
order by b.dataid desc
mbh0210 2009-08-10
  • 打赏
  • 举报
回复
SELECT a.Tname, a.DataId,b.DataValue,
FROM Temperature a
INNER JOIN HistoryData b ON a.DataId = b.DataId
inner join
(select DataId,max(日期字段) as 日期字段 HistoryData
group by DataId)c on c.DataId = b.DataId and c.日期字段 = b.日期字段
order by b.dataid desc
qxkls 2009-08-10
  • 打赏
  • 举报
回复
(DataId) 加左括号吗
mbh0210 2009-08-10
  • 打赏
  • 举报
回复
少了一个左括号
mbh0210 2009-08-10
  • 打赏
  • 举报
回复

SELECT a.Tname, a.DataId,b.DataValue,
FROM Temperature a
INNER JOIN HistoryData b ON a.DataId = b.DataId
inner join
select DataId,max(日期字段) as 日期字段 HistoryData
group by DataId)c on c.DataId = b.DataId and c.日期字段 = b.日期字段
order by b.dataid desc
qxkls 2009-08-10
  • 打赏
  • 举报
回复
jwdream2008 提示
列前缀 'b' 与查询中所用的表名或别名不匹配。
qxkls 2009-08-10
  • 打赏
  • 举报
回复
Temperature 表没时间,只能根据 HistoryData 里的时间字段 筛选
jwdream2008 2009-08-10
  • 打赏
  • 举报
回复
SELECT  a.Tname, a.DataId,b.DataValue 
FROM Temperature a where not exists(
select 1 from HistoryData b where a.DataId = b.DataId And a.[日期]<b.[日期])
qxkls 2009-08-10
  • 打赏
  • 举报
回复
有日期啊
mbh0210 2009-08-10
  • 打赏
  • 举报
回复
HistoryData 表里面有日期没有
jiangshun 2009-08-10
  • 打赏
  • 举报
回复


/***********************************************

--> 测试数据:[TB]
--> 测试时间:2009-08-10 17:04:27
--> 我的淘宝:<<戒色坊>> http://shop36766744.taobao.com/

***********************************************/

if object_id('[TB]') is not null drop table [TB]
create table [TB]([编号] varchar(2),[值] numeric(3,1),[名称] varchar(7))
insert [TB]
select 'A1',10,'采集器2' union all
select 'A1',11,'采集器2' union all
select 'A1',12,'采集器2' union all
select 'B1',90.0,'采集器1'

select * from [TB] t where not exists (select 1 from TB where t.编号=编号 and t.值<值)
/*
编号 值 名称
---- --------------------------------------- -------
A1 12.0 采集器2
B1 90.0 采集器1

(2 行受影响)


*/

drop table TB
cpp2017 2009-08-10
  • 打赏
  • 举报
回复
SELECT AA.编号,
(SELECT TOP 1 值 from 表 where 编号 = AA.编号 order by 值 desc) AS 值,
(SELECT TOP 1 名称 from 表 where 编号 = AA.编号 order by 值 desc) AS 名称

FROM (SELECT Distinct 编号 FROM 表) AS AA

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧