【问题标题】:MySQL date subquery and unique across two rowsMySQL日期子查询和两行唯一
【发布时间】:2019-03-22 16:10:10
【问题描述】:

这是我当前的查询。

SELECT  *

FROM    covered_panel_table 

WHERE   panel_id = "2" AND
        date_added <= "2019-03-22" 

ORDER BY    gene ASC, genes_covered_by_panel_id ASC

如果有多个带有样本 panel_id、基因和外显子的条目,我想添加到查询中,选择小于或等于报告日期的那个,或者如果两者都更大,则选择最新的条目。

描述covered_pa​​nel_table;

+---------------------------+-------------+------+-----+
| Field                     | Type        | Null | Key |
+---------------------------+-------------+------+-----+
| covered_panel_id          | int(11)     | NO   | PRI | 
| panel_id                  | int(11)     | YES  |     |
| gene                      | varchar(7)  | YES  |     | 
| exon                      | varchar(17) | YES  |     | 
| accession_num             | varchar(16) | YES  |     |
| date_added                | date        | YES  |     | 
+---------------------------+-------------+------+-----+

更新:

示例数据:

+------------------+----------+--------+-----------------+----------------+------------+
| covered_panel_id | panel_id | gene   | exon            | accession_num  | date_added |
+------------------+----------+--------+-----------------+----------------+------------+
|                2 |        2 | ASXL1  | 12              | NM_015338.5    | 2017-09-22 |
|              245 |        2 | BCOR   | all             | NM_001123385.1 | 2019-03-22 |
|                3 |        2 | BCOR   | all             | NM_017745.5    | 2017-09-22 |
|                4 |        2 | BRAF   | 15              | NM_004333.4    | 2017-09-22 |
|                7 |        2 | CBL    | 8, 9            | NM_005188.3    | 2019-03-18 |
|                6 |        2 | DNMT3a | all             | NM_022552.4    | 2019-03-25 |
+------------------+----------+--------+-----------------+----------------+------------+

预期结果

+------------------+----------+--------+-----------------+----------------+------------+
| covered_panel_id | panel_id | gene   | exon            | accession_num  | date_added |
+------------------+----------+--------+-----------------+----------------+------------+
|                2 |        2 | ASXL1  | 12              | NM_015338.5    | 2017-09-22 |
|              245 |        2 | BCOR   | all             | NM_001123385.1 | 2019-03-22 |
|                4 |        2 | BRAF   | 15              | NM_004333.4    | 2017-09-22 |
|                7 |        2 | CBL    | 8, 9            | NM_005188.3    | 2019-03-18 |
+------------------+----------+--------+-----------------+----------------+------------+

【问题讨论】:

  • 您的预期结果是什么?
  • Alex 我更新了这个问题。谢谢。
  • 选择小于或等于报告日期的那个什么是报告日期?为什么行 6 | 2 | DNMT3a.... 未包含在您的预期结果中?为什么 id 行`245 | 2 | BCOR |全部| NM_001123385.1 | 2019-03-22 |` 包含在您的预期结果中吗?
  • 您使用的是哪个 MySQL 版本?从 MySQL 8 开始,排名很容易。
  • "选择小于或等于报告日期的"? 2 | BCOR | all“小于或等于报告日期”有 行(假设报告日期是今天,2019-03-22)。请制定一个精确的规则。

标签: mysql


【解决方案1】:

https://www.db-fiddle.com/f/uiGXVQ85yYez4YdEF12Mt5/0

SELECT  cpt.*

FROM    covered_panel_table cpt 
LEFT JOIN covered_panel_table cpt1
  ON cpt.panel_id = cpt1.panel_id
     AND cpt.gene = cpt1.gene
     AND cpt.exon = cpt1.exon
     AND cpt.date_added < cpt1.date_added
WHERE   cpt.panel_id = "2" AND
        cpt.date_added <= "2019-03-22" 
        AND cpt1.covered_panel_id IS NULL

ORDER BY    cpt.gene ASC

我已经从ORDER BY 中删除了genes_covered_by_panel_id ASC,因为该列没有为表格定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多