嗨,我是 Teradata 的新手,遇到了一个问题
有一个 ID 表,其中存储了分配给每个人的唯一 ID
CREATE TABLE IDS(
ID VARCHAR(8),
UPDATED_DATE DATE)
然后我们有一个名称和地址表,其中没有任何存储 IDS 的人口统计信息的主键
CREATE TABLE NAMES(
ID VARCHAR(8),
NAME VARCHAR(50))
CREATE TABLE ADRRESSES(
ID VARCHAR(8)
ADDRESS VARCHAR(200))
现在每个 ID 可以有多个名称和 IDS。但是对于名称和地址,我想使用具有更多计数的名称和地址。如果两个名字有相同的 COUNT 我只想要第一行
ID NAME 计数
第1234章 6
第1234章 6
第1234章 2
在上面的示例中,我想要名称 John Smith。这是我正在执行的左连接,因为 ID 可能没有名称或地址。这是我正在尝试的
SELECT * FROM
(SELECT ID as V_ID from IDS) a
LEFT JOIN
(SELECT ID, NAME, COUNT(*) AS COUNTER,(RANK() OVER(ORDER BY COUNTER DESC)) AS RNK
FROM NAMES
GROUP BY ID)b
ON a.ID = b.ID
AND b.RNK = 1 -- Should give me only the first row
LEFT JOIN
(SELECT ID, ADDRESS, COUNT(*) AS COUNTER, (RANK() OVER (ORDER BY COUNTER DESC) ) AS RNK
FROM ADDRESSES
GROUP BY ID) c
ON c.ID = a.ID
And c.RNK = 1
然而,这并没有让我得到想要的结果。我也尝试使用 ROW NUMBER 而不是 RANK,但仍然没有结果。我应该如何在 TERDATA 中编写此查询?