如何找到以前在 sql 列中未找到的值?

问题描述 投票:0回答:1

我正在尝试在 11 月份的数据集中查找所有新投标人。

第一 第二个
a 634a
a 427f
a 338吨
a 422r
b 634a
b 427f
b 349y
b 424e
c 634a
c 349y
c 123u
c 321q

注意以前没有看到的唯一值是“123u”和“321q”吗? 我如何在 MySQL 中对其进行编码以从“First”列中找到“c”之前未见过的那些“唯一”值?

picture of actual table

如果这张图片有帮助,那就是实际的桌子。

这是我尝试运行的代码。不幸的是,出于某种原因我无法将完整的数据集导入 MySQL Bench,所以我发布了部分内容以查看我的逻辑是否正确。

select bidder_id, bid_date
from bids
where bidder_id not in (select bidder_id
from bids
where month(bid_date) < 11)
and month(bid_date) = 11;
mysql filtering data-manipulation
1个回答
0
投票

如果我正确理解您的查询,您希望在“第二”列中找到与“第一”列中的特定值不同的值,并且没有出现在前几行中的“第一”列中具有相同值的值。您可以通过使用子查询过滤掉“第一”列中以前看到的值,然后使用另一个子查询过滤掉之前行中出现的重复值来完成此操作。

你能试试这些代码语句吗,希望你能解决它并解决你的问题。请注意,您应该使用 SUBQUERY 方法

SELECT DISTINCT t1.First, t1.Second
FROM your_table t1
WHERE t1.First = 'c' -- replace 'c' with the group you want to filter
  AND t1.Second NOT IN (
    SELECT t2.Second
    FROM your_table t2
    WHERE t2.First = t1.First
    AND t2.Second <> t1.Second
    AND t2.id < t1.id
  )
  AND t1.Second NOT IN (
    SELECT t3.Second
    FROM your_table t3
    WHERE t3.First = t1.First
    AND t3.Second = t1.Second
    AND t3.id < t1.id
  )
ORDER BY t1.Second;

第一个子查询删除列“First”中每个组的所有先前看到的值,第二个子查询从前面的行中删除重复项。 DISTINCT 关键字用于从最终结果集中删除所有剩余的重复项。

您必须用您的表替换实际表的名称,并用 id 替换您的唯一标识符列的名称(如果有的话)。

进一步------------

如果您的目标是找到在 11 月份之前未出现在出价表中的“唯一”出价者 ID 值,则您发布的 SQL 代码可能不会产生预期的结果。

您可以使用子查询来查找每个出价者 ID 的最小出价日期,并过滤那些大于或等于 11 月初的出价日期,以查找在 11 月之前未出现在出价表中的唯一出价者 ID 值.

SELECT bidder_id
FROM bids
WHERE bid_date >= '2021-11-01' -- replace with the start of November
AND bidder_id NOT IN (
  SELECT bidder_id
  FROM bids
  WHERE bid_date < '2021-11-01' -- replace with the start of November
)
GROUP BY bidder_id;

此 SQL 代码应返回所有在 11 月开始出价且在 11 月之前未出价的投标人 ID 值。请记住将日期字符串“2021-11-01”替换为您感兴趣的年份的 11 月初。

我希望这对你有帮助,或者希望我指出你需要什么。

© www.soinside.com 2019 - 2024. All rights reserved.