在Oracle中获取重复记录

时间:2019-09-19 08:51:39

标签: sql oracle join oracle10g

我有3个表:orderorder_transactionorder_history

order中,仅保存了一个订单项以及order_id。     在order_history中,我保存了按该顺序发生的所有交易,例如orderAcceptedorderInProgress(这是该顺序的事件)。     在order_transaction中保存所有与交易相关的详细信息。两个表transaction_idorder_transaction中的order_history保持不变。

content of tables are 
order
    id
    created by
    created_date
    client type
    type 
    qty 
    price

order_history
    id
    order_id
    transaction_id
    events
    created_date

order_transaction
    id
    order_id
    transaction_id
    qty
    price
    status

有一个事件,客户可以在该事件中恢复名为orderProccessedReverted的订单,但不能一go而就。例如,如果有一个数量为1000的订单,然后将其还原,则将其拆分为10个不同的条目,其中order_id将保持不变,但交易将发生变化,并且该条目将同时出现在两个order_transaction中和order_history表。

两个表中的条目示例为:

order_history
id  order_id  transaction_id  events                        created_date  
001  1111       345           orderProccessedReverted       20-08-19
002  1111       346           orderProccessedReverted       20-08-19
003  1111       347           orderProccessedReverted       20-08-19


order_transaction
id  order_id  transaction_id    qty     created_date  
011  1111       345             100      20-08-19
012  1111       346             100      20-08-19
013  1111       347             100      20-08-19

现在,我正在生成一个报告,其中需要所有已还原的订单。以下是报告列:

order_id   created_by   client_type  transaction_id   qty    status          events                     created_date
111         user1           type1       444           100    reverted       orderProccessedReverted         20-08-19
111         user1           type1       445           100    reverted       orderProccessedReverted         20-08-19
111         user1           type1       446           100    reverted       orderProccessedReverted         20-08-19
111         user1           type1       447           100    reverted       orderProccessedReverted         20-08-19
112         user2           type2       551           50     reverted       orderProccessedReverted         20-08-19
112         user2           type2       552           50     reverted       orderProccessedReverted         20-08-19
112         user2           type2       553           50     reverted       orderProccessedReverted         20-08-19

我尝试进行左联接和普通联接,但是记录重复。

我尝试了以下查询:

select * from
order_history orderHist,
order_transaction  tr,
order ord
where
ord.id = tr.order_id
AND  tr.order_id = orderhist.order_id
AND tr.transaction_id = orderhist.transaction_id 
AND orderhist.event= 'orderProccessedReverted'
AND tr.status = 'REVERTED'
AND ord.tradedate='20190820';

1 个答案:

答案 0 :(得分:0)

尝试这一步,我创建了带有伪数据和几列的列,可以在select中添加更多列。

result <- df.ex %>% group_by(id_1) %>% summarise(count_distinct_values = count(distinct(., days)))