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 BY
和 GROUP_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:如何更新时间最近的一条记录的主要内容,如果未能解决你的问题,请参考以下文章