各位大侠,问个关于数据库查询的问题

程序小法师 2017-08-24 02:12:33
要查询表b中code和表a的code相同的数据(code存在多个值),这样的数据(a.code=b.code),对于a中的每个a.code在表b中可能存在多条记录使得a.code=b.code,但是每条记录都有一个唯一的时间,要取时间最近的那条,如何写sql

如:
表a
code detail
1 2
2 3
3 4
表b
code time
1 9-12
1 9-15
1 9-18
2 9-12
2 9-13
2 9-14
此时取出的结果应该是两条
1 9-18
2 9-14
这种问题好像是有人问了,但是下面这种方法我在MySQL里面实现不了
select a.*,
ifnull(b.time,'') as time,
ifnull(b.txt,'') as txt
from tableA as a
left join tableB as b
on a.tid = b.tid
group by a.tid
order by a.tid
...全文
79 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序小法师 2017-08-25
  • 打赏
  • 举报
回复
@hongmei85 谢谢您的解答,应该是我的问题没有描述完全,你的答案只是将数据按code分组,然后求出了每组里面的时间最大值,但是我还需要时间最大值这条记录里面的其他数据,也就是说表b里面的数据是下面这种情况 code time data1 data2 1 9-12 1 2 1 9-15 3 4 1 9-18 5 6 2 9-12 7 8 2 9-13 9 10 2 9-14 11 12 对于这种情况我按照你给的方法查找出的code 和时间所对应的data1 data2 是不匹配的
程序小法师 2017-08-25
  • 打赏
  • 举报
回复
我知道了,利用查询出来结果就可以查到对应的数据了,,谢谢各位的解答,上面的两个的代码原理应该是差不多的。。
二月十六 2017-08-24
  • 打赏
  • 举报
回复
用mssql写的,看看行不:
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([code] int,[detail] int)
Insert #A
select 1,2 union all
select 2,3 union all
select 3,4
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([code] int,[time] nvarchar(24))
Insert #B
select 1,N'9-12' union all
select 1,N'9-15' union all
select 1,N'9-18' union all
select 2,N'9-12' union all
select 2,N'9-13' union all
select 2,N'9-14'
Go
--测试数据结束
SELECT #A.code ,
MAX(time) AS time
FROM #A
JOIN #B ON #B.code = #A.code
GROUP BY #A.code


hongmei85 2017-08-24
  • 打赏
  • 举报
回复

USE test;

DROP TABLE
IF EXISTS `a`;

CREATE TABLE `a` (
	`code` tinyint  DEFAULT 0,
	`detail` tinyint DEFAULT 0
) ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO `a`
VALUES
	(
		1,
		2
	),
	(
		2,
		3
	),
	(
		3,
		4
	);

DROP TABLE
IF EXISTS `b`;
CREATE TABLE `b` (
	`code` tinyint  DEFAULT 0,
	`time` varchar(20) DEFAULT ''
) ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO `b`
VALUES
	(
		1,
		'9-12'
	),
	(
		1,
		'9-15'
	),
	(
		1,
		'9-18'
	),
	(
		2,
		'9-12'
	),
	(
		2,
		'9-13'
	),
	(
		2,
		'9-14'
	);


select a.`code`,`detail`,`time_max` from `a` inner join (SELECT
	`code`,
	max(`time`) `time_max`
FROM
	`b` group by `b`.code) as kkk on `a`.code=kkk.code;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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