【发布时间】:2017-03-10 04:48:24
【问题描述】:
如果我从 B 组中获取日期,那么我必须找到 B 组中任意两个连续日期之间的最大差异,并将该 days_difference 显示为单独的列。还想在两个不同的列中显示这两个日期,这些列具有最大的 days_difference。
条件:两个class id可能在数据中有相同的Class-Name。如您所见,Class-ID 1238 和 1252 具有相同的 Class-Name。输出应该是每个 class-id
所以结果应该有:ClassID、ClassName、Date1、Date 2、DateDiff
ClassName | Dates | ClassID | Spend($)
ClassA | 21-Jun-16 | 1238 | 1
ClassA | 27-Jun-16 | 1238 | 2
ClassA | 14-Apr-11 | 1252 | 3
ClassA | 15-Apr-11 | 1252 | 4
ClassC | 26-Oct-15 | 1261 | 5
ClassC | 21-Oct-15 | 1261 | 6
ClassA | 10-Dec-10 | 1252 | 21
ClassC | 15-Dec-14 | 1261 | 23
ClassC | 15-May-14 | 1261 | 34
ClassA | 10-Jan-09 | 1252 | 54
ClassA | 12-Jun-09 | 1238 | 65
ClassA | 29-Jun-12 | 1238 | 76
ClassA | 11-Apr-08 | 1252 | 87
ClassA | 01-Apr-16 | 1252 | 56
ClassC | 16-Oct-16 | 1261 | 43
ClassC | 02-Sep-05 | 1261 | 33
ClassA | 29-Dec-13 | 1252 | 77
ClassC | 13-Dec-15 | 1261 | 87
ClassC | 13-Aug-10 | 1261 | 98
ClassA | 21-Jan-14 | 1252 | 12
【问题讨论】:
-
请显示一个完整、有效的预期输出表格,以及到目前为止您尝试过的内容。您谈论“组”,但在您的示例中没有任何名称为“组”。你的意思是,“类名?”请在发布问题时具体准确。
-
鉴于样本输入数据,您期望结果是什么样的?你的逻辑我不清楚。不过,我猜你会想看看
LAG()分析函数。 -
输出应该是 table 中的每个 class-id。例如,如果您使用 class-id 1252,那么查询实际上应该遍历 id-1252 的所有日期,并找到两个连续日期之间的差异,这些日期对于 id-1252 具有最大 days_difference。表中的其他类 ID 也是如此。如果问题有点令人困惑,我很抱歉。
-
如果输出仅按 CLASSID 分组,那么您打算如何在输出中包含 CLASSNAME?我们以 CLASSID = 1238 为例。您期望该 CLASSID 的输出是什么?
-
输出应包括类名。因此,为了显示输出,分组完全是您的选择。对于 ClassID 1238,我需要类名 Date1、Date2、Days_Difference_between_Date1andDate2。日期 1 和日期 2 是 ClassID 1238 的连续日期,它们之间有最大的 days_difference。因此,如果 table 中有 500 个不同的 class-id,则输出应该有 500 行。我希望这可以消除疑问。注意:对于每个类 ID,Class_name 不是唯一的。两个 id 可以有完全相同的类名。
标签: sql oracle group-by datediff date-difference