当前位置: 首页 > 面试题库 >

MYSQL在联接语句中选择MAX日期

鲁炳
2023-03-14
问题内容

我正在尝试返回记录编号的历史位置

我所拥有的是:

SELECT l.location, t.transaction_id, t.date_modified 
FROM transactions as t
INNER JOIN (
SELECT
t1.received_id, t1.transaction_id, t1.date_modified
FROM (
 SELECT received_id, MAX(date_modified) as maxmodify
 FROM transactions
 GROUP BY received_id) as max_record
JOIN transactions as t1 
ON (t1.received_id =max_record.received_id)
) as whatever
INNER JOIN locations as l
ON l.location_id = t.location_id
INNER JOIN received as r
ON r.received_id = t.received_id
WHERE t.received_id='1782'
ORDER BY t.date_modified DESC

解析大约需要1分钟,并返回如下数据:

T-E1A   67294   2013-05-29 14:05:30
T-E1A   67293   2013-05-29 14:05:30
T-E1A   67294   2013-05-29 14:05:30
T-E1A   67293   2013-05-29 14:05:30
T-E1A   67294   2013-05-29 14:05:30
T-E1A   67293   2013-05-29 14:05:30
T-E1A   67294   2013-05-29 14:05:30

我真正希望看到的是像这样的查询中的数据:

SELECT l.location, t.transaction_id, t.date_modified FROM transactions as t
JOIN locations as l
ON l.location_id = t.location_id
JOIN received as r
ON r.received_id = t.received_id
WHERE t.received_id='1782'
ORDER BY t.date_modified DESC

哪个返回

T-E1A   67290   2013-05-29 13:58:26
T-E1A   67289   2013-05-29 13:58:26
ADJUST  67283   2013-04-26 11:33:54
ADJUST  67284   2013-04-26 11:33:54
ST10    67279   2013-04-26 09:52:41
ST10    67278   2013-04-26 09:52:13
ST10    67277   2013-04-26 09:50:58
ST10    67276   2013-04-26 09:50:20
SH3     67274   2013-04-26 09:49:39

第二个查询更好,但我真的只想显示每个记录ID和位置的最后修改时间。

有人可以看到我在做什么吗?感谢您的帮助。


问题答案:

像这样

SELECT t1.received_id
     , t1.transaction_id
     , t1.date_modified
     , l.location
  FROM transactions t1
  JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record
    ON max_record.received_id = t1.received_id 
   AND max_record.maxmodify = t1.date_modified
  JOIN locations l
    ON l.location_id = t1.location_id
  JOIN received r
    ON r.received_id = t1.received_id
 WHERE t1.received_id = '1782'
 ORDER 
    BY t1.date_modified DESC

其核心是…

SELECT x.*
  FROM my_table x
  JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y 
    ON y.id = x.id 
   AND y.max_thing = x.thing;


 类似资料:
  • 问题内容: MySql中有没有一种方法可以创建用于联接的内联表? 就像是: 那会输出 我可以在这样的联接中使用: 我意识到我可以做到 但这似乎很邪恶 我不想执行存储过程,因为在每次查询和数据大小上,a,b,c都可能发生变化。另外,存储过程也需要保存在数据库中,我不想只为此修改数据库。视图是一回事。 我真正想要的是使用更好的语法的东西。 问题答案: 我真正在寻找的是使用更好的语法执行SELECT 1

  • 问题内容: 这个问题已经在这里有了答案 : INNER JOIN ON vs WHERE子句 (12个答案) 7年前关闭。 我有两个选择连接SQL语句: 显然,它们的结果相同。但是它们之间没有任何区别,例如性能,可移植性。 问题答案: 一个区别是,第一个选项通过在where子句中表达联接条件来隐藏意图。 第二个选项,写出连接条件的条件对于阅读查询的用户来说更加清楚。它显示了查询的确切意图。 至于性

  • $result=mysql_query(“从cardex中选择max(Cardex_ID),其中onderdeel_id=$onderdeel_id”);if(!$RESULT){die(“无法查询:”.mysql_error());}

  • 我有以下SQL语句,它从数据库中选择公司(存储lat/lng),并显示离客户位置最近的5个位置。这是完美的工作: $query=sprintf(“选择公司名称、地址、电话、传真、联系人、电子邮件、网站、url、纬度、经度,(1.609344*3959*acos(弧度(“$center\u lat”)*cos(弧度(纬度))*cos(弧度(经度)-弧度(“$center\u lng”))sin(弧度

  • 问题内容: 表格示例: 所需的输出(不是确切的格式或上市顺序),每台计算机上每个应用程序的最新安装: 我的SQL语句: 这给了我: 并不是 如我所料。 如果我 仅 选择MAX(date),而没有其他选择,则MAX(date)有效。但是,那时我没有任何数据可以使用(仅是最新日期)。 我不是SQL忍者,所以我很快就会因此而挠头。 问题答案: 尝试这样: 内部查询是为您获取每对计算机和应用程序的max(

  • 问题内容: 这是表结构 我需要一条声明,列出从最近输入的每条消息,我不知道如何执行此操作。谁能指出我正确的方向?提前谢谢。 问题答案: 应该这样做: