Sql 如何在Oracle中使用日期汇总表
我有一张名为“历史”的表格:Sql 如何在Oracle中使用日期汇总表,sql,oracle,Sql,Oracle,我有一张名为“历史”的表格: CREATE TABLE HISTORY (START_DATE DATE, POSITION VARCHAR2(80 BYTE)); 该表的填充方式如下: START_DATE POSITION 15-jun-1983 SUPPLY ATTENDANT 01-abr-1987 SUPPLY HELPER 01-mar-1990 SUPPLY ASSISTANT 01-mai-1991 TECHNICAL SUPLY ASSISTENT 0
CREATE TABLE HISTORY (START_DATE DATE, POSITION VARCHAR2(80 BYTE));
该表的填充方式如下:
START_DATE POSITION
15-jun-1983 SUPPLY ATTENDANT
01-abr-1987 SUPPLY HELPER
01-mar-1990 SUPPLY ASSISTANT
01-mai-1991 TECHNICAL SUPLY ASSISTENT
01-abr-1999 TECHNICAL SUPLY ASSISTENT SR
01-dez-1999 SUPPLY TECHNICIAN
01-mai-2001 SUPERVISOR
01-jul-2002 SUPERVISOR
01-jan-2004 SECTOR MANAGER
01-jul-2005 SECTOR MANAGER
01-fev-2006 SECTOR MANAGER
01-jan-2007 SENIOR SUPPLY TECHNICIAN
01-mai-2007 SECTOR MANAGER
01-fev-2008 SENIOR SUPPLY TECHNICIAN
我想做一个查询,将其总结如下:
START_DATE POSITION
15-jun-1983 SUPPLY ATTENDANT
01-abr-1987 SUPPLY HELPER
01-mar-1990 SUPPLY ASSISTANT
01-mai-1991 TECHNICAL SUPLY ASSISTENT
01-abr-1999 TECHNICAL SUPLY ASSISTENT SR
01-dez-1999 SUPPLY TECHNICIAN
01-mai-2001 SUPERVISOR
01-jan-2004 SECTOR MANAGER
01-jan-2007 SENIOR SUPPLY TECHNICIAN
01-mai-2007 SECTOR MANAGER
01-fev-2008 SENIOR SUPPLY TECHNICIAN
简而言之,我想删除分组位置重复,只保留第一个位置重复。有人知道怎么做吗
提前感谢我们可以使用LEAD功能来完成
将当前位置与数据库中存储的下一个位置记录按顺序进行比较
WITH my_data AS
(
SELECT rownum AS rn,history.* FROM history
),
my_data_ranked AS
(SELECT START_DATE,
POSITION,
rn,
lead(position,1,0) OVER(order by rn) as lead,
lag(position,1,0) OVER(order by rn) as lag
FROM my_data
)
SELECT * FROM my_data_ranked
where POSITION <> LEAD
ORDER BY rn
在Maheswaran Ravisankar的帮助下,这里是实现结果的查询
WITH NEW_DATASET
AS (SELECT START_DATE,
POSITION,
NVL (LAG (POSITION) OVER (ORDER BY START_DATE), 'NONE')
AS PRIOR_POSITION
FROM HISTORY)
SELECT START_DATE, POSITION
FROM NEW_DATASET
WHERE POSITION <> PRIOR_POSITION;
我的兴趣是保持具有最低日期的位置,而不干扰数据集其余部分中相同位置的其他事件。为此,拉格成功了
谢谢大家! 你如何维持秩序?非常感谢你的帮助Maheswaran!!它打开了我的心扉!结果证明,在这种情况下,函数滞后更适合我。@jamesfrj我还试图保持存储数据的顺序。现在,您似乎在按日期查找订单。无论如何,很高兴它帮助了你!