仅使用特定 c_id 检索发送者数据的 Sql 查询,其中发送者和接收者数据在同一个表中

Posted

技术标签:

【中文标题】仅使用特定 c_id 检索发送者数据的 Sql 查询,其中发送者和接收者数据在同一个表中【英文标题】:Sql query for retrieve data of senders only with a specific c_id where senders and receivers data in same table 【发布时间】:2020-12-17 10:46:35 【问题描述】:

t 是一个表格,其中包含快递员的发送和接收日期以及他们各自的客户,客户 ID 是 c_id,快递员 ID 是 cr_id,打磨或接收日期是 dt。

create table t(c_id int,cr_id int,dt date);

insert into t values
(1,56,'2020-05-15'),(56,56,'2020-10-17'),
(1,8,'2020-05-17'),(56,8,'2020-12-17'),
(123,78,'2020-01-17'),(1,78,'2020-12-18');

如果有任何订单成功下达,我会先插入发送快递的客户,然后再插入接收快递的客户。

这里我只想用特定的 c_id 检索发件人的数据?

【问题讨论】:

继续。尝试一下。 嗨瓦伦。你的问题是什么。请尝试更具描述性。 z你不就用where c_id = ?吗? 【参考方案1】:

你需要ROW_NUMBER窗口函数如下:

select * from
(select t.*, row_number() over (partition by cr_id) as rn
  from t)
where rn = 1

【讨论】:

【参考方案2】:

它与@Popeye 的含义相同,但需要 order by 才能获得第一个值:

select dt, cr_id from (
  select t.dt, t.cr_id, 
  row_number() over (partition by cr_id order by cr_id ) rn
  from t) t1
where rn = 1
order by cr_id

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=266a34e3c5183430e5308d82ad90c248

【讨论】:

以上是关于仅使用特定 c_id 检索发送者数据的 Sql 查询,其中发送者和接收者数据在同一个表中的主要内容,如果未能解决你的问题,请参考以下文章

本机查询 - 如何仅从数据库中检索实体的特定列

从表中选择所有或仅特定的行

在 SQL 中出现特定文本字符串时检索行

多表查询

从数据库中检索特定行并显示特定行中的所有数据并使用 php 发送 json

ORACLE PL/SQL - 使用 SYSDATE 检索特定日期的数据时出现检索问题