作者:血红中国心_686 | 来源:互联网 | 2022-12-09 19:54
这听起来很奇怪的用例,但我想用一些数据更新日期列.请在下表中找到.我正在处理JSON格式的数据.
CityName | data1 | data2 | date
Mumbai | 1.234 | 2.3456| Sat Jan 20 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 6.234 | 2.3456| Sat Jan 20 2018 18:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jan 21 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 2.234 | 2.3456| Sun Jan 21 2018 18:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jan 21 2018 24:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jan 21 2018 00:00:00 GMT+0000 (UTC)
Mumbai | 8.234 | 2.3456| Fri Jan 19 2018 01:00:00 GMT+0000 (UTC)
Mumbai | 3.334 | 2.3456| Fri Jan 19 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 8.214 | 2.3456| Fri Jan 19 2018 14:00:00 GMT+0000 (UTC)
Mumbai | 19.234| 2.3456| Thu Jan 18 2018 12:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Wed Jan 17 2018 12:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Wed Jan 17 2018 12:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Sat Jan 20 2018 12:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Sat Jan 20 2018 18:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Sun Jan 21 2018 12:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Sun Jan 21 2018 18:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Sun Jan 21 2018 24:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Sun Jan 21 2018 00:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Fri Jan 19 2018 01:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Fri Jan 19 2018 12:00:00 GMT+0000 (UTC)
Pune | 1.234 | 2.3456| Fri Jan 19 2018 14:00:00 GMT+0000 (UTC)
Ahmadabad| 1.234 | 2.3456| Thu Jan 18 2018 12:00:00 GMT+0000 (UTC)
Ahmadabad| 1.234 | 2.3456| Wed Jan 17 2018 12:00:00 GMT+0000 (UTC)
Ahmadabad| 1.234 | 2.3456| Wed Jan 17 2018 12:00:00 GMT+0000 (UTC)
现在,根据城市名称,我想更新所有日期,以便今天是2018年7月23日,我选择了Mumbai
,现在我想首先按降序顺序获取与所选城市相关的所有数据(例如'孟买')按日期递减的顺序,按照昨天的日期,即2018年7月22日的每4条记录开始更新记录,这样时间戳将变化6小时.但不应更新剩余的列数据.
然后对于孟买市,如果我按降序排序数据,那么我得到了这个
Mumbai | 1.234 | 2.3456| Sun Jan 21 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 2.234 | 2.3456| Sun Jan 21 2018 18:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jan 21 2018 24:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jan 21 2018 00:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sat Jan 20 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 6.234 | 2.3456| Sat Jan 20 2018 18:00:00 GMT+0000 (UTC)
Mumbai | 8.234 | 2.3456| Fri Jan 19 2018 01:00:00 GMT+0000 (UTC)
Mumbai | 3.334 | 2.3456| Fri Jan 19 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 8.214 | 2.3456| Fri Jan 19 2018 14:00:00 GMT+0000 (UTC)
Mumbai | 19.234| 2.3456| Thu Jan 18 2018 12:00:00 GMT+0000 (UTC)
现在预计o/p应该是
Mumbai | 1.234 | 2.3456| Sun Jul 22 2018 00:00:00 GMT+0000 (UTC)
Mumbai | 2.234 | 2.3456| Sun Jul 22 2018 06:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jul 22 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sun Jul 22 2018 18:00:00 GMT+0000 (UTC)
Mumbai | 1.234 | 2.3456| Sat Jul 21 2018 00:00:00 GMT+0000 (UTC)
Mumbai | 6.234 | 2.3456| Sat Jul 21 2018 06:00:00 GMT+0000 (UTC)
Mumbai | 8.234 | 2.3456| Sat Jul 21 2018 12:00:00 GMT+0000 (UTC)
Mumbai | 3.334 | 2.3456| Sat Jul 21 2018 18:00:00 GMT+0000 (UTC)
Mumbai | 8.214 | 2.3456| Fri Jul 20 2018 00:00:00 GMT+0000 (UTC)
Mumbai | 19.234| 2.3456| Fri Jul 20 2018 06:00:00 GMT+0000 (UTC)
我不应该更新我的其他列数据,而只应更新我要更新的日期,方法是记录相同日期但不同时段的4条记录.
或者也可以接受任何中间件逻辑(更喜欢Javascript),它不会真正更新数据库中的数据,但可以在两者之间操纵数据.
帮助将不胜感激....!
1> IVO GELOV..:
它非常简单 - 只需对行进行编号,然后根据行号计算时间(SQLfiddle)
SELECT
IF(@city = cityname, @ctr := @ctr + 1, @ctr := 0) AS rownum,
@city := cityname AS cityName,
DATE_SUB(CURRENT_DATE, INTERVAL CEIL((@ctr + 1) / 4) DAY) AS datum,
SEC_TO_TIME((@ctr % 4) * 21600) AS vreme
FROM tblCity
JOIN (SELECT @ctr := 0) AS tmp
ORDER BY cityName,date DESC
编辑 - 解释
(SELECT @ctr := 0) AS tmp
初始化值为0的自定义会话变量.它将用于计算每个城市的行数.
然后,您将获得城市和时间戳列表 - 按升序对城市进行排序,但按降序排列时间戳.
IF(@city = cityname, @ctr := @ctr + 1, @ctr := 0)
确保每次为下一个城市启动一组新行时将rownumber重置为0 - 我们使用会话变量@city
来捕获切换.
DATE_SUB(CURRENT_DATE, INTERVAL CEIL((@ctr + 1) / 4) DAY)
只需获取当前日期并从中减去多少天,因为当前城市有4行组.对于行0/1/2/3,它将减去1,然后对于行4/5/6/7减去2,然后对于行8/9/10/11减去3,依此类推.
SEC_TO_TIME((@ctr % 4) * 21600)
简单地以HH:MM:SS格式从几秒钟转换为时间,并且每行增加6小时.