MySQL:如何更新时间最近的一条记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL:如何更新时间最近的一条记录相关的知识,希望对你有一定的参考价值。

每条记录都有一个记录时间的字段,我想只更新最接近当前时间的一条记录,应该怎么写SQL语句呀,谢谢大家帮帮我!

呵呵,一楼方法确实可以用,只是在具体解决问题当中却不会那么去用,一般来说,你要更新某字段,都是更新某一类属性中某个具体字段,就比如说你想更新某考生考号最近记录,而不会是去更新所有记录当中最近记录,

以下创建的是一个考号更新触发器,其更新考生信息表中某考生考号,而update其中要使用到参数 @" ",其默认更新最近一条记录。仅供参考
create trigger yonghu
on 考生信息 for update
as
declare @kaohao9 varchar(40)
if update (考号)
begin
if not exists (select * from 考生信息 where 考号=
(select 考号 from inserted))
begin
raiserror ('非法考号!',15,1)
rollback transaction
end
select 考号 from inserted
where @kaohao9= 考号
update 考生情况 set 考号= @kaohao9
update 试卷 set 考号= @kaohao9
end
参考技术A 可以用个很简单的办法.
select * from 表 order by Data(这个是你自己时间的字段) desc .

然后再读取RS的时候用if(rs.next())而不用while这样就是最接近的那条记录了.

如何将多条记录中的有序数据返回到 MySQL 中的一条记录中?

【中文标题】如何将多条记录中的有序数据返回到 MySQL 中的一条记录中?【英文标题】:How to return ordered data from multiple records into one record in MySQL? 【发布时间】:2014-01-13 18:05:03 【问题描述】:

我有一个 MySQL 数据库,其中包含一个包含三个重要字段(为清楚起见重命名)的调查回复表:SURVEY_TAKER_ID、QUESTION_NUMBER 和 RESPONSE。以一个包含 3 个问题的调查为例,它看起来像这样:

SURVEY_TAKER_ID | QUESTION_NUMBER | RESPONSE
----------------------------------------
101               1                 Apple
102               1                 Orange
103               1                 Banana
101               2                 Morning
102               2                 Evening
103               2                 Afternoon
101               3                 Red
102               3                 Blue
103               3                 Yellow

我想创建一个 SELECT 查询,按问题编号顺序输出每个调查对象的 ID 和回答,例如:

101,Apple,Morning,Red
102,Orange,Evening,Blue
103,Banana,Afternoon,Yellow

我知道 SQL Server 有FOR XML,这可以使这更容易,但我的数据库在 MySQL 中,我必须承认,我一开始并不是很擅长 SQL。谁能给我一个示例查询,它会产生上面的输出,或者给我一个方法吗?

非常感谢任何可以提供帮助的人...

...杰

【问题讨论】:

ORDER BYGROUP_CONCAT 为您指出一种方法 ==> mahmudahsan.wordpress.com/2008/08/27/… 【参考方案1】:

试试这个:

SELECT CONCAT(SURVEY_TAKER_ID, ',', RESPONSE)
FROM (SELECT SURVEY_TAKER_ID, GROUP_CONCAT(RESPONSE) RESPONSE
      FROM (SELECT * FROM SURVEY ORDER BY SURVEY_TAKER_ID, QUESTION_NUMBER) A 
      GROUP BY SURVEY_TAKER_ID
     ) A 

【讨论】:

非常感谢,萨哈什。我会试一试并报告! 嗨,萨哈什。谢谢,但这会将对给定问题的所有回答放在每条记录中。我试图将每个survey_taker 的所有回复都放在每条记录中。不过,我感谢您的帮助! @JayinNJ 检查我更新的答案。我已将 group by 子句从 QUESTION_NUMBER 更改为 SURVEY_TAKER_ID【参考方案2】:

SURVEY_TAKER_ID 与“Question_Number: RESPONSE”样式连接:

SQL Fiddle

SELECT SURVEY_TAKER_ID
      ,GROUP_CONCAT(CONCAT(QUESTION_NUMBER, ': ', RESPONSE) ORDER BY QUESTION_NUMBER SEPARATOR ', ') AS RESPONSES
FROM Table1
GROUP BY SURVEY_TAKER_ID
ORDER BY SURVEY_TAKER_ID

.

SURVEY_TAKER_ID 与“RESPONSE”单独样式连接:

SQL Fiddle

SELECT SURVEY_TAKER_ID
      ,GROUP_CONCAT(RESPONSE ORDER BY QUESTION_NUMBER SEPARATOR ', ') AS RESPONSES
FROM Table1
GROUP BY SURVEY_TAKER_ID
ORDER BY SURVEY_TAKER_ID

【讨论】:

非常感谢,比尔。我会试一试并报告! 嗨,比尔。非常感谢您这样做。通过查看 SQL Fiddle 输出,我唯一担心的是那里没有控制来确保RESPONSE 输出按QUESTION_NUMBER 排序。有没有办法把它加进去?我尝试将ORDER BY 子句放在RESPONSE SEPARATOR 之后的括号中,但SQL Fiddle 抛出了错误。 嘿,杰。我相信您可能将 ORDER BY 放在 CONCAT 函数中,而不是 GROUP_CONCAT。我的第一个代码块在 GROUP_CONCAT 中嵌入了一个 CONCAT。我用似乎有效的 ORDER BY 更新了我的答案,并链接到新的小提琴 URS。我还按 SURVEY_tAKER_ID 对外部结果进行了排序。 好吧,我是个白痴。我现在知道了:SELECT SURVEY_TAKER_ID ,GROUP_CONCAT(RESPONSE ORDER BY QUESTION_NUMBER ASC SEPARATOR ', ') AS RESPONSES FROM Table1 GROUP BY SURVEY_TAKER_ID 感谢您的帮助!你摇滚!

以上是关于MySQL:如何更新时间最近的一条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何将多条记录中的有序数据返回到 MySQL 中的一条记录中?

如何根据 MySQL 中的最大日期仅选择左表的一条记录?

在 Mongo 集合中更新数组中的一条记录

mysql中如何查询表的第一条和最后一条记录

如何获取mysql重复项中的最后一条数据

SQL查询取分组最大值