gpt4 book ai didi

mysql - 在 SELECT 查询之前获取行

转载 作者:可可西里 更新时间:2023-11-01 06:33:01 24 4
gpt4 key购买 nike

我有一个名为“mytable”的表。列是

Time_Stamp (datetime) PK
Time_stamp_ms (int) PK
data1 (int)
data2 (int)
data3 (int)
data4 (int)
data5 (int)
data6 (int)
cycle (int)
name (varstring)

我想按 Time_Stamp 和 Time_stamp_ms 排序(我从另一个问题知道如何做到这一点)然后每次循环达到 1 时,我想从上一行获取 Time_Stamp 和 Time_Stamp_ms。循环为1,2,3,4......n表示它会一直递增1。

这个表可能有数百万行。

也没有 PHP。

有一个我的表的样本:

Time_Stamp              Time_Stamp_ms   d1      d2      d3      d4      d5      d6      cycle   name    

2014-04-24 09:09:37 765 5555 4444 3333 2222 1111 123 1 name
2014-04-24 09:09:37 845 5555 4444 3333 2222 1111 123 2 name
2014-04-24 09:09:37 925 5555 4444 3333 2222 1111 123 3 name
2014-04-24 09:09:38 5 5555 4444 3333 2222 1111 123 4 name
2014-04-24 09:09:38 85 5555 4444 3333 2222 1111 123 5 name
2014-04-24 09:09:38 165 5555 4444 3333 2222 1111 123 6 name
2014-04-24 09:09:38 245 5555 4444 3333 2222 1111 123 7 name
2014-04-24 09:09:38 325 5555 4444 3333 2222 1111 123 8 name
2014-04-24 09:09:38 405 5555 4444 3333 2222 1111 123 9 name
2014-04-24 09:09:38 485 5555 4444 3333 2222 1111 123 10 name
2014-04-24 09:09:38 565 5555 4444 3333 2222 1111 123 11 name
2014-04-24 09:09:38 645 5555 4444 3333 2222 1111 123 12 name
2014-04-24 09:09:38 725 5555 4444 3333 2222 1111 123 13 name
2014-04-24 09:09:38 805 5555 4444 3333 2222 1111 123 1 name
2014-04-24 09:09:38 885 5555 4444 3333 2222 1111 123 2 name
2014-04-24 09:09:38 965 5555 4444 3333 2222 1111 123 3 name
2014-04-24 09:09:39 45 5555 4444 3333 2222 1111 123 4 name
2014-04-24 09:09:39 125 5555 4444 3333 2222 1111 123 5 name
2014-04-24 09:09:39 205 5555 4444 3333 2222 1111 123 6 name
2014-04-24 09:09:39 285 5555 4444 3333 2222 1111 123 1 name
2014-04-24 09:09:39 365 5555 4444 3333 2222 1111 123 2 name
2014-04-24 09:09:39 445 5555 4444 3333 2222 1111 123 3 name
2014-04-24 09:09:39 525 5555 4444 3333 2222 1111 123 4 name
2014-04-24 09:09:39 605 5555 4444 3333 2222 1111 123 5 name
2014-04-24 09:09:39 685 5555 4444 3333 2222 1111 123 6 name
2014-04-24 09:09:39 765 5555 4444 3333 2222 1111 123 1 name
2014-04-24 09:09:39 845 5555 4444 3333 2222 1111 123 2 name
2014-04-24 09:09:39 925 5555 4444 3333 2222 1111 123 3 name

应该返回我:

    Time_Stamp              Time_Stamp_ms   d1      d2      d3      d4      d5      d6      cycle   name    


2014-04-24 09:09:38 725 5555 4444 3333 2222 1111 123 13 name
2014-04-24 09:09:39 205 5555 4444 3333 2222 1111 123 6 name
2014-04-24 09:09:39 685 5555 4444 3333 2222 1111 123 6 name

最佳答案

如评论中所述,您确实需要一个指示行顺序的字段。 pkey int primary key auto_increment 字段不能保证最新的行始终具有最大的 id,因此严格来说,这在 100% 的时间都不起作用。一个包含准确插入时间的列就可以了。

尽管假设(我知道是错误的),您的值字段是一个可以排序的字段,但此查询将为您获取 id=1 之前的每一行。要获得正确的结果,请创建一个按顺序排列的字段,并将 value 替换为两个 order by 子句中的该字段

更新查询:http://sqlfiddle.com/#!2/9cf7d1/1/0

SELECT Time_Stamp, Time_stamp_ms, cycle FROM (
SELECT
COALESCE((@preVal=1), 0) AS afterOne,
m.*,
@preVal:=m.cycle
FROM mytable as m,
(SELECT @preVal:=NULL) AS d
ORDER BY Time_Stamp desc, Time_stamp_ms desc
) t
WHERE afterOne = 1
ORDER BY Time_Stamp, Time_stamp_ms;

一个补充说明。如果您正在处理一个大数据集,您可能会发现通过将内部查询插入临时表、索引 afterOne,然后选择最终结果来显着提高性能。 MySQL 因子查询速度慢而臭名昭著。

附言。嗯,我现在知道我可能选错了,afterOne 真的意味着在按升序排序之前。好吧,无论如何它都是一个占位符,可以命名为任何有意义的名称。

关于mysql - 在 SELECT 查询之前获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com