Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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/0/performance/5.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 艺术日期。我想把一些问题简化到能够提出一个合理的问题是相当困难的。我猜您已经更改了一些内容,因为USER甚至不是有效的列名,因为它是一个保留字。您好。我认为你的是对的。实际上,srinu的选项非常快,但我没有时间根据自己的需要正确地实现它。还有,这里有更多_Sql_Performance_Oracle - Fatal编程技术网

Sql 艺术日期。我想把一些问题简化到能够提出一个合理的问题是相当困难的。我猜您已经更改了一些内容,因为USER甚至不是有效的列名,因为它是一个保留字。您好。我认为你的是对的。实际上,srinu的选项非常快,但我没有时间根据自己的需要正确地实现它。还有,这里有更多

Sql 艺术日期。我想把一些问题简化到能够提出一个合理的问题是相当困难的。我猜您已经更改了一些内容,因为USER甚至不是有效的列名,因为它是一个保留字。您好。我认为你的是对的。实际上,srinu的选项非常快,但我没有时间根据自己的需要正确地实现它。还有,这里有更多,sql,performance,oracle,Sql,Performance,Oracle,艺术日期。我想把一些问题简化到能够提出一个合理的问题是相当困难的。我猜您已经更改了一些内容,因为USER甚至不是有效的列名,因为它是一个保留字。您好。我认为你的是对的。实际上,srinu的选项非常快,但我没有时间根据自己的需要正确地实现它。还有,这里有更多的人发布与你相同的答案,但你有更好的解释。谢谢@菲利波-刚刚看了一下斯里努的答案。我们的两个答案应该给出大致相同的结果,并且在性能方面应该相似。densite_-RANKadROW_-NUMBER之间的区别在于,行号将是严格唯一的。例如,如果给


艺术日期。我想把一些问题简化到能够提出一个合理的问题是相当困难的。我猜您已经更改了一些内容,因为
USER
甚至不是有效的列名,因为它是一个保留字。您好。我认为你的是对的。实际上,srinu的选项非常快,但我没有时间根据自己的需要正确地实现它。还有,这里有更多的人发布与你相同的答案,但你有更好的解释。谢谢@菲利波-刚刚看了一下斯里努的答案。我们的两个答案应该给出大致相同的结果,并且在性能方面应该相似。
densite_-RANK
ad
ROW_-NUMBER
之间的区别在于,行号将是严格唯一的。例如,如果给定用户的两行具有相同的结束日期(我猜您不应该这样做),则
ROW\u NUMBER
将对这些1和2进行编号(可能是不确定的),但
densite\u RANK
将对它们进行编号,并返回两个。我认为,
首先为空
是必要的,因为它会从当前计划中产生。。这确实很快,但让我研究了稠密的东西。你介意再详细说明一下你在这里做了什么吗?(很抱歉这么生疏!)谢谢在
ORDER BY
子句中添加
NULLS FIRST
,可能会让它更清晰。不应该
sequen
严格地<2?@APC,太糟糕了,小伙子。请注意,我在谷歌上搜索。不明白为什么在简短的回答中询问细节会得到如此粗鲁的反馈。谢谢。这和米凯比克里基说的差不多。他只是得到了一个更长的解释。
USER |  PLAN |  START_DATE  |   END_DATE
1    |  A    |  20110101    |   NULL
1    |  B    |  20100101    |   20101231
2    |  A    |  20100101    |   20100505
select  plan
from    (
        select  plan
        from    YourTable
        where   User = 1
        order by
                case when end_date is null then '99991231' else end_date end desc
        )
where   rownum < 2
SELECT User, Plan, start_Date, MAX(End_Date) FROM Plans WHERE User NOT IN 
(SELECT User FROM Plans WHERE End_Date IS NULL)
GROUP BY Start_Date, Plan, User  
UNION  
SELECT User,Plan,Start_Date FROM Plans WHERE End_Date IS NULL
SELECT U.user 
,(SELECT Plan FROM t WHERE t.user=u.user AND end_date IS NULL LIMIT 1) AS Current_Plan
,(SELECT Plan FROM t WHERE t.user=u.user AND end_date IS NOT NULL ORDER BY end_date DESC LIMIT 1) AS Last_Plan
FROM 
( SELECT DISTINCT USER FROM t ) AS U
select PLAN
from USER_TABLE
where END_DATE is null or END_DATE = (
        select max(END_DATE)
        from USER_TABLE
        where USER = 1 and END_DATE is not null)
    and USER = 1
select user, plan, start_date, end_date
from (
  select 
    user, 
    plan, 
    start_date, 
    end_date, 
    row_number() over (partition by user order start_date desc) as row_num_1,
    row_number() over (partition by user order end_date desc nulls first) as row_num_2
  from user_table
  where user = :userid
)
where row_num_1 = 1
select user, plan, start_date, end_date
from (
  select 
    user, 
    plan, 
    start_date, 
    end_date, 
  from user_table
  where user = :userid
  order by start_date desc
)
where rownum = 1
SELECT user,plan,end_date,start_date 
FROM ( SELECT users,plans,end_date,start_date, DENSE_RANK() OVER ( PARTITION BY user 
                                                                   ORDER BY end_date DESC) sequen 
        FROM table_name 
     ) 
WHERE sequen <= 2
CREATE TABLE XY
( USERID      INTEGER                 NOT NULL
, PLAN        VARCHAR2(8)             NOT NULL
, START_DATE  DATE                    NOT NULL
, END_DATE    DATE                    )
  TABLESPACE USERS;


INSERT INTO XY ( USERID, PLAN, START_DATE, END_DATE )
       VALUES ( 1, 'A', To_Date('22-05-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS'), To_Date('22-05-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS') );
INSERT INTO XY ( USERID, PLAN, START_DATE, END_DATE )
       VALUES ( 1, 'B', To_Date('01-04-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS'), NULL );
INSERT INTO XY ( USERID, PLAN, START_DATE, END_DATE )
       VALUES ( 2, 'A', To_Date('03-05-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS'), To_Date('04-05-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS') );
INSERT INTO XY ( USERID, PLAN, START_DATE, END_DATE )
       VALUES ( 2, 'B', To_Date('15-05-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS'), To_Date('20-05-2011 00:00:00', 'DD-MM-YYYY HH24:MI:SS') );
COMMIT WORK;

SELECT USERID, PLAN, END_DATE, START_DATE
  FROM (SELECT USERID,
               PLAN,
               END_DATE,
               START_DATE,
               ROW_NUMBER() OVER(PARTITION BY USERID ORDER BY END_DATE DESC) SEQUEN
          FROM XY)
 WHERE SEQUEN < 2
with t as 
(select 1 as col_id, 1 as USER_id, 'A' as PLAN , 20110101 as START_DATE, NULL as  END_DATE from dual union all
 select 2,1,'B', 20100101,20101231 from dual union all
 select 3,2,'A', 20100102,20100505 from dual union all
 select 4,2,'C', 20100101,20100102 from dual)
--
SELECT user_id, plan
  FROM (SELECT user_id,
               plan,
               MAX(nvl(END_DATE, 99999999)) over(PARTITION BY user_id) max_date,
               nvl(END_DATE, 99999999) END_DATE
          FROM t)
 WHERE max_date = end_date