【问题标题】:How to find MIN and MAX of two columns from TWO different tables?如何从两个不同的表中找到两列的 MIN 和 MAX?
【发布时间】:2013-08-08 09:44:44
【问题描述】:

TABLE1 包含每天按代理名称分组的代理第一次呼叫的时间和代理最后一次呼叫的时间。 p>

代理先呼叫后呼叫
2013 年 8 月 5 日 10:59 2013 年 8 月 5 日 19:50
2013 年 8 月 6 日 11:06 2013 年 8 月 6 日 19:50
B 2013 年 8 月 5 日 10:33 2013 年 8 月 5 日 10:35
C 2013 年 8 月 5 日 10:04 2013 年 8 月 5 日 9:56
C 2013 年 8 月 6 日 10:02 2013 年 8 月 6 日 9:47
D 2013 年 8 月 5 日 10:37 2013 年 8 月 5 日 18:47
D 2013 年 8 月 6 日 14:58 2013 年 8 月 6 日 18:19
D 2013 年 8 月 6 日 10:01 2013 年 8 月 6 日 9:59
2013 年 8 月 5 日 12:29 2013 年 8 月 5 日 18:51
2013 年 8 月 6 日 12:05 2013 年 8 月 6 日 18:48
女 2013 年 8 月 6 日 11:15 2013 年 8 月 6 日 19:49
G 2013 年 8 月 5 日 10:04 2013 年 8 月 5 日 10:09
G 2013 年 8 月 6 日 10:39 2013 年 8 月 6 日 9:54

TABLE2 由代理名称和该代理的每日登录和注销时间组成。

代理登录 注销 2013-08-05 11:02:52 2013-08-05 20:05:45 2013-08-06 11:00:30 2013-08-06 20:06:47 B 2013-08-05 08:59:07 2013-08-05 18:01:58 B 2013-08-06 09:11:43 2013-08-06 18:08:49 C 2013-08-05 08:58:21 2013-08-05 17:59:29 C 2013-08-06 08:59:13 2013-08-06 18:03:53 D 2013-08-05 10:37:55 2013-08-05 19:56:20 D 2013-08-06 10:37:04 2013-08-06 20:00:43 2013-08-06 09:20:50 2013-08-06 18:00:35 F 2013-08-05 10:58:06 2013-08-05 20:00:24 2013-08-06 10:49:19 2013-08-06 20:01:37 2013-08-06 11:00:17 2013-08-06 19:58:31 H 2013-08-05 09:00:38 2013-08-05 18:16:16 H 2013-08-06 08:56:38 2013-08-06 17:57:00

我需要以这样一种方式加入这些表,以便每天获得 AGENT、FIRSTCALL、LASTCALL、LOGIN、LOGOUT。在上面的示例中,我只列出了两天的数据,但数据存在两年以上(>700 天)。

以前,我曾尝试通过“代理”连接这些表,但这会导致多条记录。出路是什么?

【问题讨论】:

  • 在join条件中添加date_of_First_Call和Date_of_Login。
  • minmax 在哪里适合?您似乎在每张桌子上每天每个代理都有一个条目,那么您会汇总什么?这些是存储为日期还是字符串?他们会一直按时排队吗? (例如,代理可以在 23:59 登录并在 00:01 接听他们的第一个电话,如果可以,应该如何处理?)
  • 我需要所有四列的最小最大值。日期是 varchar (和不同的格式),这就是为什么我无法在日期上使用连接。但是,如果这是唯一的方法,我将不得不自己更改格式。

标签: sql oracle join max min


【解决方案1】:

这样的事情会起作用。可能有更好的方法将时间戳转换为日期。

select T1.AGENT, T1.FIRSTCALL, T1.LASTCALL, T2.LOGIN, T2.LOGOUT
from Table1 T1
    inner join Table2 T2 on
        T2.AGENT = T1.AGENT and
        to_char(T1.FIRSTCALL, 'YYYYMMDD') = to_char(T2.LOGIN, 'YYYYMMDD')

参见sql fiddle 示例

【讨论】:

    【解决方案2】:
    select T1.AGENT, T1.FIRSTCALL, T1.LASTCALL, T2.LOGIN, T2.LOGOUT
    from Table1 T1
        inner join Table2 T2 on
            T2.AGENT = T1.AGENT and
            to_char(T1.FIRSTCALL, 'YYYYMMDD') = to_char(T2.LOGIN, 'YYYYMMDD')
    

    【讨论】:

    • 这个问题的答案发表于 4 年前。为什么你现在又发布相同的答案?
    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多