试图通过两个不同桌子的时间戳订购行雪花

发布于 2025-02-13 07:19:19 字数 2241 浏览 1 评论 0原文

我有两个表,如下所示,

table_1

person_idldts
452022-03-03 15:41:05.685
722022-03-03-03 15:42:42:08.203
152022-06-06-06-08 21:57:57:57:07.909 36 2022-06-28 21:07.909
362022-06-28 21:07.909 58:43.558

Table_2

Person_IdLDTS货币
342022-03-03 15:00:21.81428
2022-03-0315:02:02:05.96352
2022-03-03-0315:02:05:05.963US
102022-06-06-08 14:40:40:13.762US
USCA 06-08 14:40:13.762CA
192022-06-14 16:10:19.005我们

试图通过时间戳加入这些表和订单,以便获得诸如

Person_IDTable_1.ldtsTable_2.ldtsCurrency之
类的结果34NULL2022-03-03-03 15:00:21.814US
28 US 28NAULL 2022 --NULL2022- 03-03 15:02:05.963CA
52NULL2022-03-03 15:02:05.963US
452022-03-03 15:41:05.685NULL NULLNULL NULL
722022-03-03 15:42:08.203NAULLNULL NULL
10NULL2022-06-08 14:40:13.762US
11NULLNULL 10 NULL 10 :13.762CA
152022-06-08 21:57:07.909NULL
19NULL2022-06-14 16:10:19.005US
362022-06-28 21:58:43.558NINULLNULL NULL

是否只是在LDTS上加入吗?我不确定如何获取结果表以使时间戳以这种方式排序,如果其值不在另一个表中,则不共享的列包含nulls。当我尝试进行完整的外部连接时,看起来行复制了LDTS,而LDTS成为一个单数列,而其他列的值都是无效的。谢谢!

I have two tables as follows

TABLE_1

PERSON_IDLDTS
452022-03-03 15:41:05.685
722022-03-03 15:42:08.203
152022-06-08 21:57:07.909
362022-06-28 21:58:43.558

TABLE_2

PERSON_IDLDTSCURRENCY
342022-03-03 15:00:21.814US
282022-03-03 15:02:05.963CA
522022-03-03 15:02:05.963US
102022-06-08 14:40:13.762US
112022-06-08 14:40:13.762CA
192022-06-14 16:10:19.005US

I am trying to join these tables and order by timestamp in order to get a result such as

PERSON_IDTABLE_1.LDTSTABLE_2.LDTSCURRENCY
34NULL2022-03-03 15:00:21.814US
28NULL2022-03-03 15:02:05.963CA
52NULL2022-03-03 15:02:05.963US
452022-03-03 15:41:05.685NULLNULL
722022-03-03 15:42:08.203NULLNULL
10NULL2022-06-08 14:40:13.762US
11NULL2022-06-08 14:40:13.762CA
152022-06-08 21:57:07.909NULLNULL
19NULL2022-06-14 16:10:19.005US
362022-06-28 21:58:43.558NULLNULL

Would this just be a left join on LDTS? I am not sure how to get the resulting table such that the timestamps are ordered in this way and the columns that are not shared contain nulls if their values are not in the other table. When I try to do a full outer join, it looks like rows are duplicated for LDTS and LDTS becomes a singular column while the values for the other columns are all null. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁与争疯 2025-02-20 07:19:21

获取另一个表中的键的行可以作为基于设定的问题来处理:

select T1.PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY  from TABLE_1 T1 left join TABLE_2 T2 on T1.LDTS = T2.LDTS
union
select T2.PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY from TABLE_2 T2 left join TABLE_1 T1 on T1.LDTS = T2.LDTS
order by nvl(T1_LDTS, T2_LDTS)
;

响应评论中的问题,如果Table_2没有Person_ID列,则只需指定它的null:null:

select T1.PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY  from TABLE_1 T1 left join TABLE_2 T2 on T1.LDTS = T2.LDTS
union
select NULL as PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY from TABLE_2 T2 left join TABLE_1 T1 on T1.LDTS = T2.LDTS
order by nvl(T1_LDTS, T2_LDTS)
;

Getting the rows where the key in the other table is null reciprocally could be handled as a set-based issue:

select T1.PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY  from TABLE_1 T1 left join TABLE_2 T2 on T1.LDTS = T2.LDTS
union
select T2.PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY from TABLE_2 T2 left join TABLE_1 T1 on T1.LDTS = T2.LDTS
order by nvl(T1_LDTS, T2_LDTS)
;

In response to the question in the comments, if TABLE_2 does not have a PERSON_ID column, then simply specify that it's null:

select T1.PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY  from TABLE_1 T1 left join TABLE_2 T2 on T1.LDTS = T2.LDTS
union
select NULL as PERSON_ID, T1.LDTS as T1_LDTS, T2.LDTS as T2_LDTS, CURRENCY from TABLE_2 T2 left join TABLE_1 T1 on T1.LDTS = T2.LDTS
order by nvl(T1_LDTS, T2_LDTS)
;
莫言歌 2025-02-20 07:19:21

Another one - similar to @Greg -

with cte(person_id, ldts) as
 (select person_id,ldts from table_1
 union all
 select person_id,ldts from table_2)
select t3.person_id, t1.ldts, t2.ldts, t2.currency from
 cte t3 left join table_1 t1
 on t3.person_id = t1.person_id
left join table_2 t2
 on t3.person_id = t2.person_id
order by t3.ldts;
PERSON_IDLDTSLDTSCURRENCY
34NULL2022-03-03 15:00:21.814US
28NULL2022-03-03 15:02:05.963CA
52NULL2022-03-03 15:02:05.963US
452022-03-03 15:41:无效05.685
722022-03-03 15:42:08.203nullNull Null
10Null 10 Null2022-06-08 14:40:13.762US
11Null2022-06-06-08 14:40:13.762CA
152022-2022-06-06-06-08NullNull
19Null2022-06-14 16:10:19.005US
362022-06-28 21:58:无效43.558

Another one - similar to @Greg -

with cte(person_id, ldts) as
 (select person_id,ldts from table_1
 union all
 select person_id,ldts from table_2)
select t3.person_id, t1.ldts, t2.ldts, t2.currency from
 cte t3 left join table_1 t1
 on t3.person_id = t1.person_id
left join table_2 t2
 on t3.person_id = t2.person_id
order by t3.ldts;
PERSON_IDLDTSLDTSCURRENCY
34NULL2022-03-03 15:00:21.814US
28NULL2022-03-03 15:02:05.963CA
52NULL2022-03-03 15:02:05.963US
452022-03-03 15:41:05.685NULLNULL
722022-03-03 15:42:08.203NULLNULL
10NULL2022-06-08 14:40:13.762US
11NULL2022-06-08 14:40:13.762CA
152022-06-08 21:57:07.909NULLNULL
19NULL2022-06-14 16:10:19.005US
362022-06-28 21:58:43.558NULLNULL
孤独难免 2025-02-20 07:19:21

是否想做这样的事情,也可以做到这一点

SELECT COALESCE(T1.PERSON_ID,T2.PERSON_ID), 
COALESCE(T1.LDTS,T2.LDTS) AS T1_T2_LDTS, 
CURRENCY 
    FROM TABLE_1 AS T1 
    FULL OUTER JOIN TABLE_2 AS T2
        ON T1.PERSON_ID = T2.PERSON_ID
        ORDER BY T1_T2_LDTS;

还是如果您真的想要以发布格式,您

SELECT COALESCE(T1.PERSON_ID,T2.PERSON_ID), 
    T1.LDTS,T2.LDTS , 
    CURRENCY 
        FROM TABLE_1 AS T1 
        FULL OUTER JOIN TABLE_2 AS T2
            ON T1.PERSON_ID = T2.PERSON_ID
            ORDER BY COALESCE(T1.LDTS,T2.LDTS);

Or were you trying to do something like this

SELECT COALESCE(T1.PERSON_ID,T2.PERSON_ID), 
COALESCE(T1.LDTS,T2.LDTS) AS T1_T2_LDTS, 
CURRENCY 
    FROM TABLE_1 AS T1 
    FULL OUTER JOIN TABLE_2 AS T2
        ON T1.PERSON_ID = T2.PERSON_ID
        ORDER BY T1_T2_LDTS;

IF you really wanted in the format you posted, you can also do this

SELECT COALESCE(T1.PERSON_ID,T2.PERSON_ID), 
    T1.LDTS,T2.LDTS , 
    CURRENCY 
        FROM TABLE_1 AS T1 
        FULL OUTER JOIN TABLE_2 AS T2
            ON T1.PERSON_ID = T2.PERSON_ID
            ORDER BY COALESCE(T1.LDTS,T2.LDTS);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文