Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql为当前行的下一行或上一行提取行_Sql_Mysql - Fatal编程技术网

sql为当前行的下一行或上一行提取行

sql为当前行的下一行或上一行提取行,sql,mysql,Sql,Mysql,假设我有32kJ的身份证。我该如何获得下一行还是上一行?可怕的黑客攻击-我不喜欢这样,但可能会有用 id | photo title | created_date XEi43 | my family | 2009 08 04 dDls | friends group | 2009 08 05 32kJ | beautiful place | 2009 08 06 EOIk | working late | 2009 08 07 这有

假设我有32kJ的身份证。我该如何获得下一行还是上一行?

可怕的黑客攻击-我不喜欢这样,但可能会有用

id | photo title | created_date XEi43 | my family | 2009 08 04 dDls | friends group | 2009 08 05 32kJ | beautiful place | 2009 08 06 EOIk | working late | 2009 08 07
这有什么用?

我知道您使用的是MySQL,但仅供参考,以下是使用Oracle的分析函数LEAD and LAG实现这一点的方法:

with yourresult as
(
select id, photo_title, created_date, ROW_NUMBER() over(order by created_date) as 'RowNum' from your_table
)
-- Previous
select * from yourresult where RowNum = ((select RowNum from yourresult where id = '32kJ') -1)
-- Next
select * from yourresult where RowNum = ((select RowNum from yourresult where id = '32kJ') +1)
我想Oracle花钱而MySQL免费是有原因的…:-


此页显示。

是否希望按日期显示下一行/上一行?如果是这样,您可以这样做:

select empno, ename, job,
  lag(ename, 1) over (order by ename) as the_guy_above_me,
  lead(ename, 2) over (order by ename) as the_guy_two_rows_below_me
from emp
order by ename

这就是我用来查找上一个/下一个记录的方法。表中的任何列都可以用作排序列,不需要连接或恶意攻击:

下一记录日期大于当前记录:

select MyTable.*
from MyTable
join
  (select id
   from MyTable
   where created_date < (select created_date from MyTable where id = '32kJ')
   order by created_date desc, id desc
   limit 1
  ) LimitedTable on LimitedTable.id = MyTable.fund_id;
SELECT id, title, MIN(created) AS created_date
FROM photo
WHERE created >
  (SELECT created FROM photo WHERE id = '32kJ')
GROUP BY created
ORDER BY created ASC
LIMIT 1;
上一记录日期小于当前记录日期:

select MyTable.*
from MyTable
join
  (select id
   from MyTable
   where created_date < (select created_date from MyTable where id = '32kJ')
   order by created_date desc, id desc
   limit 1
  ) LimitedTable on LimitedTable.id = MyTable.fund_id;
SELECT id, title, MIN(created) AS created_date
FROM photo
WHERE created >
  (SELECT created FROM photo WHERE id = '32kJ')
GROUP BY created
ORDER BY created ASC
LIMIT 1;
例如:

SELECT id, title, MAX(created) AS created_date
FROM photo
WHERE created <
  (SELECT created FROM photo WHERE id = '32kJ')
GROUP BY created
ORDER BY created DESC
LIMIT 1;

使用Mike的“最大/最小”技巧,我们可以对各种事情进行上一次/下一次跳跃。此msAccess示例将返回股票市场数据表中每个记录的上一次收盘。注意:“我将id视为表中的主键和行号,并使用它将每条记录与之前的记录进行比较。 以下代码必须工作

(SELECT Date FROM tableName) AS iJoined
  /* previous record */
(SELECT MAX(Date) FROM tableName WHERE Date < iJoined.Date)
  /* next record */
(SELECT MIN(Date) FROM tableName WHERE Date > iJoined.Date)

下一个或上一个的概念取决于顺序。您可能会通过编程实现这一点,方法是使用ado.net或其他技术检索数据集,然后循环遍历该数据表示形式的记录。如果您的id字段是连续的和数字的,那么很容易做到这一点,因为您使用的是字母字符,这一点非常棘手。不幸的是,也许不是。这是SQL小姐-我昨天午餐时想了一想,但没有太多时间-今晚我再看一看..我发现这个错误1064-你的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解使用near的正确语法,第1行的结果为select photo_id、title、ADTED_date、ROW_NUMBER overord。您也可以在Postgres 8.4中获得这些分析函数:pjeremy stein,您还可以告诉我,如果我可以从显示100行中的6行中检查当前行的位置,这个查询可以吗?或者我需要扩展查询吗?如果是扩展,那么我必须如何或做什么?我只想从总行中知道当前行的位置,这样我就可以使用下一行和上一行了。。所以用户知道他们在哪里,就像在facebook上一样。我也想为当前行添加定位,然后是下一行和上一行。。我该怎么做?是的,你可以做这些事情,但从呼叫应用程序中做可能更有意义。我还没有尝试过,但我确信这会带来结果,我只是想知道,哪一个查询速度更快。如果已经对结果排序并将其限制为1行,为什么要使用聚合函数?是否需要在单个查询中比较上一条记录和下一条记录的解决方案。因此,请尝试上面的方法。。
CREATE SCHEMA temp
create table temp.emp (id integer,name varchar(50), salary  varchar(50));
insert into temp.emp values(1,'a','25000');
insert into temp.emp values(2,'b','30000');
insert into temp.emp values(3,'c','35000');
insert into temp.emp values(4,'d','40000');
insert into temp.emp values(5,'e','45000');
insert into temp.emp values(6,'f','20000');

select * from temp.emp

SELECT
    current.id, current.name, current.salary,
    case 
        when current.id = 1 then current.salary 
        else 
            case
                when current.salary > previous.salary then previous.salary
                else current.salary  
            end
     end
FROM
    temp.emp AS current
    LEFT OUTER JOIN temp.emp AS previous
    ON current.id = previous.id + 1