从单个sql表中的两列计算不同的日期

6bc51xsx  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(434)

我一直在阅读这里贴出的类似问题的解决方案,但似乎没有一个能解决我的特定问题。
我目前有一个表(ctu-joined),它包括三列:identifer列(tumourid)、date列(avctu-date)和另一个date列(opdate)。
例如,两个ID的列如下所示:

ID, AVCT_DATE, OPDATE
1, 06-APR-13, 06-APR-13
1, 06-APR-13, 14-JUN-13
1, 06-APR-13, 22-JUN-13
2, 03-APR-14, 10-DEC-15
2, 03-APR-14, 31-DEC-15

我试图做的是创建一个列,该列等于每个id的唯一日期数,因此id 1的结果是3,id 2的结果是3。
我尝试在两列中计算不同的值,但这并不能提供上面的答案(而是分别报告值3和2):

select TUMOURID, COUNT(DISTINCT(AVCT_DATE || OPDATE)) AS COUNT 
FROM CT_JOINED
GROUP BY TUMOURID;

如果我尝试在新表中执行同样的操作,也会发生同样的情况:

CREATE TABLE CT_DISTINCT AS (
SELECT TUMOURID, COUNT(*) AS COUNT
FROM (
SELECT DISTINCT TUMOURID, AVCT_DATE, OPDATE
FROM CT_JOINED)
GROUP BY TUMOURID
);

我不知所措。有可能吗?

nhaq1z21

nhaq1z211#

取出数据,然后使用 count(distinct) 或删除重复项:

select tumourid, count(*)
from ((select tumourid, avct_date as dte
       from ct_joined
      ) union -- intentional to remove duplicates
      (select tumourid, opdate as dte
       from ct_joined
      )
     ) t
group by tumourid;
dfuffjeb

dfuffjeb2#

使用 UNION 为避免重复日期,请使用 count(*) :

SELECT tumourid, COUNT(date)
FROM ((SELECT tumourid, avct_date AS date
       FROM ct_joined
      ) UNION
      (SELECT tumourid, opdate 
       FROM ct_joined
      )
     ) t
GROUP BY tumourid;
lnlaulya

lnlaulya3#

下面的所有答案都像一个符咒,只需稍加调整,就可以解释具有空值的行。例如:

SELECT TUMOURID, COUNT(*)
FROM ((SELECT TUMOURID, AVCT_DATE AS DTE
       FROM CT_JOINED
       WHERE AVCT_DATE IS NOT NULL
      ) UNION
      (SELECT TUMOURID, OPDATE AS DTE
       FROM CT_JOINED
       WHERE OPDATE IS NOT NULL
      )
     ) T
GROUP BY TUMOURID;

非常感谢。

nzrxty8p

nzrxty8p4#

您可以使用:

SELECT TUMOURID, COUNT(DISTINCT d) AS cnt
FROM (select TUMOURID, AVCT_DATE AS d
      FROM CT_JOINED
      UNION ALL
      SELECT TUMOURID, OPDATE AS d) sub
GROUP BY TUMOURID;

相关问题