Mysql 从表中检索数据的Sql查询

Mysql 从表中检索数据的Sql查询,mysql,sql,Mysql,Sql,如何从表中检索奇数行 在基表中,始终将Cr_id复制2次。 我需要一个SELECT语句,它只检索那些c_id=1,其中Cr_id始终位于第一位,如输出表中所示。 只要看看基表和输出表,你就会自动知道我想要什么,Thanx。你要找的可能是“分区依据”,至少如果你在mssql上工作的话。 (以后请多加背景,SQL不仅仅是SQL) 我有一个旧的查询,它能够对缺少该查询的数据设置排序索引,尽管其根本原因是99.9%的数据设计肯定不好 通常,我使用此查询删除错误数据,但您可以将其重写为联接,以便识别

如何从表中检索奇数行

在基表中,始终将Cr_id复制2次。

我需要一个SELECT语句,它只检索那些c_id=1,其中Cr_id始终位于第一位,如输出表中所示。


只要看看基表和输出表,你就会自动知道我想要什么,Thanx。

你要找的可能是“分区依据”,至少如果你在mssql上工作的话。 (以后请多加背景,SQL不仅仅是SQL)

我有一个旧的查询,它能够对缺少该查询的数据设置排序索引,尽管其根本原因是99.9%的数据设计肯定不好

通常,我使用此查询删除错误数据,但您可以将其重写为联接,以便识别所需的数据

我之所以不在这里给出答案,是为了指出,糟糕的数据设计会在事后阅读时导致更多的工作,这似乎是真正的根本原因

DELETE t
FROM
(
SELECT ROW_NUMBER () OVER (PARTITION BY column_1 ,column_2, column_3 ORDER BY column_1,column_2 ,column_3 ) AS Seq
FROM Table
)t
WHERE Seq > 1

只要测试min date就足够了

drop table if exists t;
create table t(c_id int,cr_id int,dt date);
insert into t values
(1,56,'2020-12-17'),(56,56,'2020-12-17'),
(1,8,'2020-12-17'),(56,8,'2020-12-17'),
(123,78,'2020-12-17'),(1,78,'2020-12-18');

select c_id,cr_id,dt
from t
where c_id = 1 and
        dt = (select min(dt) from t t1 where t1.cr_id = t.cr_id);

+------+-------+------------+
| c_id | cr_id | dt         |
+------+-------+------------+
|    1 |    56 | 2020-12-17 |
|    1 |     8 | 2020-12-17 |
+------+-------+------------+
2 rows in set (0.002 sec)

欢迎来到StackOverflow。请提供您的查询,您已经尝试过了吗?谢谢请查看“请以文本形式发布样本数据和预期输出”以及您到目前为止拥有的内容。欢迎访问so。请看:这是正确的问题检查这个