MySQL日期子查询和跨两行的唯一性

标签 mysql

这是我当前的查询。

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 |
+------------------+----------+--------+-----------------+----------------+------------+

最佳答案

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,因为该列没有为表定义。

关于MySQL日期子查询和跨两行的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55303701/

相关文章:

php - 设置 PHP 和 mySQL 脚本以自动化邮政文书工作

php - 如何在美德商城中获取所有类别和子类别的名称

php - Mysql查询将不受影响变为0

php - Eve API xml 到 php

MySQL查询每月购买的汽车总数

mysql 其中日期是现在+ 2 周之前

mysql - 在 MySQL 中使用比较运算符(大于/小于/等于)比较日期/日期时间/时间/时间戳/等是否合法?

mysql - 如何在MVC Entity Framework 中使用Mysql数据库

MYSQL将单个列中的两个不同值拆分为两列

mysql - 连接MySQL服务器的shell脚本