【发布时间】:2012-01-06 04:01:00
【问题描述】:
问题陈述:
选择所有商店名称、状态、电话号码、生效日期 其电话号码从 2003 年至今已更改。
架构是
store_name,phone number , start_date , status
样本行
abc 1234 30-DEC-2011 open
abc 3433 04-Jan-2012 close
bbb 4444 30-Jan-2010 open
bbb 4444 31-Jan-2011 open
输出
abc 1234 open 30-DEC-3011 till 3-Jan-2012
abc 3433 close 04-Jan-2012 till date
我也可以在输出中有两行排序的开始日期,例如
abc 1234 30-DEC-2011 open
abc 3433 04-Jan-2012 close
bbb 不应报告,因为电话号码没有变化。我们应该只报告那些电话号码被更改的商店。
有人可以帮助我在 Oracle 上进行此查询吗?我想通过使用相关查询可以完成,但我不确定如何构建一个。
请注意,我的表有大约 3154953 条记录,因此我还需要确保相关查询不会长时间锁定表。这甚至可以通过 Oracle 实现吗?
谢谢!
APC 的回答对我有用,只是我在结果中看到了很多重复。
输入:
select store_name,phone_number,start_date, status where store_name=abc;
返回
STORE_name Phone number start_date STATUS
---------------- ---------------- ----------- ----------
abc 122 18-JAN-2011 open
abc 122 18-JAN-2011 open
abc 122 18-JAN-2011 close
运行您的查询会给我以下输出。
abc 122 open from 18-JAN-2011 to 17-JAN-2011
abc 122 open from 18-JAN-2011 to 17-JAN-2011
abc 122 close from 18-JAN-2011 to date
你能解释一下为什么以及小姐在哪里吗?
【问题讨论】:
-
@ManseUK - 您已删除 [mysql] 标记并忽略标题中对 MySQL 的引用。在开始编辑之前,请确保您的更改不会扭曲 OP 的意图。
-
@APC 道歉...这是我今天犯的 2 个编辑错误...。添加标签...虽然我真的不知道为什么它在标题或标签中?
-
@TopCoder - “我看到很多重复......你能解释一下原因吗”。您的数据包含大量重复。重复输入产生重复输出并不奇怪,现在是这样吗?至于 END_DATE 的奇怪之处,我的查询预计记录之间会有一天的宽限期。如果你真的有这样古怪的业务逻辑,那么你将不得不定制查询来应对它们。
标签: oracle