当前位置: 首页 > 面试题库 >

具有不同时间戳的重复条目

索瀚海
2023-03-14
问题内容

我有一个按名称Customer_SCD列出的客户表:在SQL中,其中有3列:Customer_NameCustomer_ID
Customer_TimeStamp

此表中有重复的条目,但 时间戳记 不同。

例如

ABC, 1, 2012-12-05 11:58:20.370

ABC, 1, 2012-12-03 12:11:09.840

我想从数据库中消除此问题,并保持第一时间/日期可用。

谢谢。


问题答案:

这有效,请尝试:

DELETE  Customer_SCD
OUTPUT  deleted.*
FROM    Customer_SCD b
JOIN    (
    SELECT  MIN(a.Customer_TimeStamp) Customer_TimeStamp,
            Customer_ID,
            Customer_Name
    FROM    Customer_SCD a
    GROUP   BY a.Customer_ID, a.Customer_Name
) c ON 
    c.Customer_ID = b.Customer_ID
AND c.Customer_Name = b.Customer_Name
AND c.Customer_TimeStamp <> b.Customer_TimeStamp

在子查询中,它确定哪个记录是每个的第一个记录Customer_NameCustomer_ID然后删除所有其他记录以作重复。我还添加了该OUTPUT子句,该子句返回受该语句影响的行。

您也可以通过使用排名功能来做到这一点ROW_NUMBER

DELETE  Customer_SCD
OUTPUT  deleted.*
FROM    Customer_SCD b
JOIN    (
    SELECT  Customer_ID,
            Customer_Name,
            Customer_TimeStamp,
            ROW_NUMBER() OVER (PARTITION BY Customer_ID, Customer_Name ORDER BY Customer_TimeStamp) num
    FROM    Customer_SCD
) c ON 
    c.Customer_ID = b.Customer_ID
AND c.Customer_Name = b.Customer_Name
AND c.Customer_TimeStamp = b.Customer_TimeStamp
AND c.num <> 1

看看哪一个查询开销较小并使用它,当我检查它时,第一种方法效率更高(它具有更好的执行计划)。

这是一个 SQL小提琴



 类似资料:
  • null 还是有其他(更好的)选择? 谢谢

  • 这是我的Flink工作流程: 首先我遇到了 java.lang.Exception: org.apache.flink.streaming.runtime.tasks.ExceptionInChainedOperatorException: Can not forward element to next operator 在< code>flatMap运算符中,任务继续重新启动。我观察到许多重复的

  • 至少一次语义:如果生产者从Kafka代理接收到确认(ack),并且acks=all,则表示消息已准确写入Kafka主题一次。但是,如果生产者确认超时或收到错误,它可能会在假定消息未写入Kafka主题的情况下重试发送消息。如果代理在发送ack之前失败,但在消息成功写入Kafka主题之后失败,则此重试会导致消息被写入两次,并因此多次传递给最终使用者。 我知道时间戳是根据消息从生产者发送的时间设置的。如

  • 问题内容: 我需要确保数据库仅包含两个或两个以上列是唯一的条目。这可以很容易地通过对那些列的约束来实现。 就我而言,我只需要在重叠的时间范围内禁止重复。该表具有和列。在某些情况下,可能首先需要通过设置来使活动条目到期,然后插入调整为和的新条目。 使用似乎可以使先前的条目到期而没有任何问题,但是由于我的基本列当前为,因此插入新条目似乎很麻烦,因此无法再次添加。 我考虑添加和作为约束的一部分,但这只会

  • 我有两个csv文件,我想读入熊猫的数据帧。我想合并它们,但显示时间不能重复。 如果ShowingDateTime是重复的,我想从第一个数据帧而不是第二个数据帧中选择行。我不确定用熊猫做这件事的最好方法。我想排序基于升序ShowingDateTime之后。 CSV1: CSV2: 预期合并结果(在df合并后写入csv):