Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 我想这就是我所需要的。@vol7ron:这个答案是错误的。但是lead()可以工作。我发布了一个答案。很抱歉,我没有及时回复你对这个问题的评论。我想避免这种情况,因为记录不规范。我知道我的例子不好,但我希望找到的是有序结果集中的数字和与记录的相关性。具体地_Sql_Postgresql - Fatal编程技术网

Sql 我想这就是我所需要的。@vol7ron:这个答案是错误的。但是lead()可以工作。我发布了一个答案。很抱歉,我没有及时回复你对这个问题的评论。我想避免这种情况,因为记录不规范。我知道我的例子不好,但我希望找到的是有序结果集中的数字和与记录的相关性。具体地

Sql 我想这就是我所需要的。@vol7ron:这个答案是错误的。但是lead()可以工作。我发布了一个答案。很抱歉,我没有及时回复你对这个问题的评论。我想避免这种情况,因为记录不规范。我知道我的例子不好,但我希望找到的是有序结果集中的数字和与记录的相关性。具体地,sql,postgresql,Sql,Postgresql,我想这就是我所需要的。@vol7ron:这个答案是错误的。但是lead()可以工作。我发布了一个答案。很抱歉,我没有及时回复你对这个问题的评论。我想避免这种情况,因为记录不规范。我知道我的例子不好,但我希望找到的是有序结果集中的数字和与记录的相关性。具体地说,我认为这就是我所需要的。@vol7ron:这个答案是错误的。但是lead()可以工作。我给出了一个答案。我切换到MySQL的可能性很小,但我相信它将来可能会有窗口功能——至少,如果Oracle不购买它,它可能会有。因此,我更可能转向Orac


我想这就是我所需要的。@vol7ron:这个答案是错误的。但是
lead()
可以工作。我发布了一个答案。很抱歉,我没有及时回复你对这个问题的评论。我想避免这种情况,因为记录不规范。我知道我的例子不好,但我希望找到的是有序结果集中的数字和与记录的相关性。具体地说,我认为这就是我所需要的。@vol7ron:这个答案是错误的。但是
lead()
可以工作。我给出了一个答案。我切换到MySQL的可能性很小,但我相信它将来可能会有窗口功能——至少,如果Oracle不购买它,它可能会有。因此,我更可能转向Oracle、SQL Server或DB2。SQL Server在其SQL中已经是一场噩梦,但DB2的限制类似于
仅获取前n行
,这与
前n行
限制n
有很大不同
lead
不起作用,因为它不包括未来日期(它需要当前日期的两侧)。另外,WHERE语句可能需要使用
dt_lead7
-我认为别名不能在那里使用。@vol7ron:我添加了一个版本来涵盖这个问题,并详细解释了为什么它可以正常工作。我明天必须回顾一下(希望)我切换到MySQL的可能性很小,但我相信它将来可能会有窗口功能——至少,如果Oracle不购买它,它可能会有。因此,我更可能转向Oracle、SQL Server或DB2。SQL Server在其SQL中已经是一场噩梦,但DB2的限制类似于
仅获取前n行
,这与
前n行
限制n
有很大不同
lead
不起作用,因为它不包括未来日期(它需要当前日期的两侧)。另外,WHERE语句可能需要使用
dt_lead7
-我认为别名不能在那里使用。@vol7ron:我添加了一个版本来覆盖这个角落的情况,并详细解释了为什么它可以正常工作。我明天必须回顾这个(希望)
       dt     |    mnth    |  foo
--------------+------------+--------
  2012-12-01  |  December  |
    ...
  2012-08-01  |  August    |
  2012-07-01  |  July      |
  2012-06-01  |  June      |
  2012-05-01  |  May       |
  2012-04-01  |  April     |
  2012-03-01  |  March     |
    ...
  1997-01-01  |  January   |  
WITH dates AS (
   select  row_number() over (order by dt desc)
         , dt
         , dt - now()::date as dt_diff
   from    foo
)
, closest_date AS (
   select * from dates
   where dt_diff = ( select max(dt_diff) from dates where dt_diff <= 0 )
)

SELECT * 
FROM   dates
WHERE  row_number - (select row_number from closest_date) >= -3
   AND row_number - (select row_number from closest_date) <=  7 ;
select * from foo 
where dt between now()- interval '7 months' and now()+ interval '3 months'
create table foo (dt date);
insert into foo values
('2012-12-01'),
('2012-08-01'),
('2012-07-01'),
('2012-06-01'),
('2012-05-01'),
('2012-04-01'),
('2012-03-01'),
('2012-02-01'),
('2012-01-01'),
('1997-01-01'),
('2012-09-01'),
('2012-10-01'),
('2012-11-01'),
('2013-01-01')
;

select dt
from (
(
    select dt
    from foo
    where dt <= current_date
    order by dt desc
    limit 4
)
union all
(
    select dt
    from foo
    where dt > current_date
    order by dt
    limit 7
)) s
order by dt
;
     dt     
------------
 2012-03-01
 2012-04-01
 2012-05-01
 2012-06-01
 2012-07-01
 2012-08-01
 2012-09-01
 2012-10-01
 2012-11-01
 2012-12-01
 2013-01-01
(11 rows)
SELECT dt_lead7 AS dt
FROM  (
    SELECT *, lead(dt, 7) OVER (ORDER BY dt) AS dt_lead7
    FROM   foo
    ) d
WHERE  dt <= now()::date
ORDER  BY dt DESC
LIMIT  11;
SELECT d.dt_lead7 AS dt
FROM  (
    SELECT *, lead(dt, 7) OVER (ORDER BY dt) AS dt_lead7
    FROM  (
        SELECT '-infinity'::date AS dt FROM generate_series(1,7)
        UNION ALL
        SELECT dt FROM foo
        ) x
    ) d
WHERE  d.dt <= now()::date -- same as: WHERE  dt <= now()::date1
ORDER  BY d.dt_lead7 DESC  -- same as: ORDER BY dt DESC 1
LIMIT  11;
WITH x AS (
    SELECT *
         , row_number() OVER (ORDER BY dt)  AS rn
         , first_value(dt) OVER (ORDER BY (dt > '2011-11-02')
                                         , dt DESC) AS dt_nearest
    FROM   foo
    )
, y AS (
    SELECT rn AS rn_nearest
    FROM   x
    WHERE  dt = dt_nearest
    )
SELECT dt
FROM   x, y
WHERE  rn BETWEEN rn_nearest - 3 AND rn_nearest + 7
ORDER  BY dt;