mysql表关联只取关联表中最近一条数据

问题描述

mysql表关联只取关联表中最近一条数据

表A{id,userId,logTime}
表B{id,userId,departmentId,updateTime}

表A为数据记录
表B相当于历史记录表(userId在updateTime时间之前的departmentId)

现在表A与表B关联 但是只能让表B中符合条件的最近一记录关联上
(也是updateTime在logTime之前并且最近的一条)
我是这么做的
SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN B
ON A.userId=B.userId AND A.logTime>B.updateTime
但是这样会将B表中多条符合条件的数据全取出来,而我只想要最近的一条就足够了
表A表B中都可能有多个userId与日期!!
求解

解决方案

还是自己答了吧!!
SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN B
ON A.userId=B.userId AND B.id=(SELECT id FROM B ib WHERE A.logTime>=ib.updateTime ORDER BY ib.updateTime DESC LIMIT 1 )

解决方案二:

select b.id, b.userId, max(b.updateTime) from b
inner join a on a.userId = b.userId AND A.logTime>B.updateTime
group by b.userId

不知道你要的是不是这个样子的

解决方案三:

mysql---多表关联
MYSQL 关联表
两个MYSQL表关联查询

解决方案四:

试试 limit
例如:
select * from use where uid>5 limit 1;
从表 use 中获取 uid 大于 5 的 1 条记录(该记录是紧挨着的)

解决方案五:

SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN B
ON A.userId=B.userId AND A.logTime>B.updateTime limit 1;

时间: 2024-08-29 11:55:56

mysql表关联只取关联表中最近一条数据的相关文章

一张表如何关联另一张表中的两条数据!出现错误!代码和表如下!在线等

问题描述 一张表如何关联另一张表中的两条数据!出现错误!代码和表如下!在线等 public DataTable GetScrapTirePage(StringBuilder SqlWhere, IList<SqlParam> IList_param, int pageIndex, int pageSize, ref int count) { StringBuilder strSql = new StringBuilder(); strSql.Append("select Base_S

c-C语言数据库编程,往数据库中写入一条数据,编译出错

问题描述 C语言数据库编程,往数据库中写入一条数据,编译出错 #include #include #include char userid[10] = "gaps/gaps"; int main() { char yw_xh[8] = "2"; char yw_xm[20] = "王小二"; char yw_xb = 'W'; char yw_yx[50] = "气象学院"; int yw_ywcj = 80; int yw_

使用C# 在sqlite数据库中更新一条数据,当前应用程序中是有效的,当我关闭应用程序后,再次打开应用程序,查询,发现更改失败,请各位大神们看看什么原因,谢谢。

问题描述 使用C#在sqlite数据库中更新一条数据,当前应用程序中是有效的,当我关闭应用程序后,再次打开应用程序,查询,发现更改失败,请各位大神们看看什么原因,谢谢代码:sql="UPDATESchoolSETdelegate='北航'WHEREID=2";cmd.CommandText=sql;cmd.ExecuteNonQuery();表结构: 解决方案 本帖最后由 yyyy1999 于 2015-06-09 16:50:07 编辑解决方案二:你的cmd支持sqlite数据库吗?

java jdbc-向mysql中插入50000条数据怎么那么慢。。。

问题描述 向mysql中插入50000条数据怎么那么慢... package cn.itcast.bath; import java.sql.Connection; import java.sql.PreparedStatement; import org.junit.Test; import cn.itcast.jdbc.JDBCUtils; public class Bath { @Test public void demo1() { Connection conn=null; Prepar

sqlserver-左连接条件的执行顺序? 测试中,300条数据成功,700条数据出错(substring不能为空)

问题描述 左连接条件的执行顺序? 测试中,300条数据成功,700条数据出错(substring不能为空) select *from tb1left join tb2on tb1.str != nulland substring(str 0 2) = tb2.str. 解决方案 on tb1.str is not nulland tb2.str is not nulland substring(tb1.str 0 2) = tb2.str.

C#显示数据中的多条数据 需要用到什么控件?

问题描述 新手,如题.C#基于WIN_form的应用程序,如果要显示数据库中的多条数据需要用到什么空间?如何使用谢谢 解决方案 解决方案二:dataGridViewlistBoxlistView解决方案三:datagridview,简单点的话,利用向导你可以实现显示数据库的数据到网格.解决方案四:DataGridViewlistView解决方案五:datagridview+dataAdapterdataSet

文件读取-c++ 修改文件中的一条数据(不完全读出再重新写入)

问题描述 c++ 修改文件中的一条数据(不完全读出再重新写入) 假设现在文件中存储的是 1 computer 2 computer 3 computer 三条记录, 我想把第一条数据改成 5 computer, 但是想要直接用write在文件首部写入5 computer 把1 computer 覆盖掉,而不是把数据全部读出后修改完再重新写入,就像c语言的 fwrite函数,不知如何操作?谢谢了 解决方案 http://bbs.csdn.net/topics/340168885 fwrite也可以

string-关于数据库中插入多条数据,其中有一项关于to_date的问题

问题描述 关于数据库中插入多条数据,其中有一项关于to_date的问题 String sql = "insert into TestInfo(tiName, to_date('tiStartTime','YYYY-MM-DD' ),tiState,TiGrade) values(?,?,?,?)"; 这句数据库语句关于to_date的地方有哪里不对?为什么会报错说缺失逗号 解决方案 to_date('tiStartTime','YYYY-MM-DD' ) 这个位置应该是一个字段名称,怎

extjs-查看grid中的一条数据. 如何获取radiogroup的值

问题描述 查看grid中的一条数据. 如何获取radiogroup的值 请问,我现在有一个grid. 我添加了一个人双击查看这条数据的事件. 但是在显示的form中,别的字段都是可以获取到的,只有radiogroup是获取不到. 找了一上午不知道为什么,麻烦各位大神给解答一下,谢谢 麻烦看下我的页面和代码. 麻烦各位大神给解答一下.非常感谢. 解决方案 console.log(gridRecord)看看sourceDataType字段内容是什么,自己对比下record的键名称sourceData