【问题标题】:How to get distinct records based on flag or most recent update timestamp?如何根据标志或最近的更新时间戳获取不同的记录?
【发布时间】:2020-07-17 14:10:30
【问题描述】:

我正在尝试根据以下条件获取记录。

表格:存储

架构:

create table store (product varchar(50),product_id number,product_type varchar(10),product_flag char(1),product_upd_dt Date);
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',123,'GALA','Y','16-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',123,'GALA','N','16-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',134,'JAZZ','N','16-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',134,'JAZZ','N','14-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',134,'JAZZ','N','15-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',13,'ENVY','Y','15-MAR-20 06.49.05');
commit;

1)除此之外,我想根据 product_flag='Y' 获取 product_id

2) 如果 product_flag 为“N”,则获取最近更新的 product_id。

3)一个产品可以映射到相同的product_id,但不同的product_types。

4)同一行可以重复但product_upd_dt不同

这是一个例子。

输入图像

这是预期的输出-

输出图像

提前致谢。

【问题讨论】:

  • 您真正使用哪个数据库?我怀疑你使用 MySQL PostgreSQL Oracle,对吗?
  • 我正在使用 oracle。

标签: sql database oracle sql-insert create-table


【解决方案1】:

啊,1-4代表方向,不是单独的问题……对不起,我最初误解了这个问题。

这个怎么样?

SQL> select product,
  2    product_id,
  3    product_type,
  4    max(product_flag) product_Flag,
  5    max(product_upd_dt) product_upd_dt
  6  from store
  7  where product_id in (select product_id
  8                       from store
  9                       where product_flag = 'Y'
 10                      )
 11  group by product, product_id, product_type;

PRODUCT    PRODUCT_ID PRODUCT_TY P PRODUCT_UPD_DT
---------- ---------- ---------- - ------------------
Apple             134 ENVY       Y 15-mar-20 06.49.05
Apple             123 GALA       Y 16-mar-20 06.49.05
Apple             134 JAZZ       N 16-mar-20 06.49.05

SQL>

【讨论】:

  • 这些是数据标准。很抱歉造成混淆。我想您理解这是两个单独的查询。但这应该在单个查询中实现。如果您查看输出,您会更好地理解。跨度>
  • 对;在看到所需的输出后想通了。请查看修改后的查询。
  • 它部分工作。当我执行你的查询时,我得到了 4 条记录的输出。但我看到你的输出只有 3 条记录。我什至也得到了这条记录 Apple 134 JAZ N 14-MAR-20 06.49.05(应该被淘汰。)
  • 对不起,我不明白你的意思。结果我得到了 3 行,它们与您想要的输出相匹配。您在说什么“4 条记录”?
  • 发生了什么变化?除了最后一行的 ID = 13(根据您发布的第一个屏幕截图,它应该是 134)?
猜你喜欢
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2014-04-07
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多