gpt4 book ai didi

sql - 在 SQL Server 中匹配多行

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:41 25 4
gpt4 key购买 nike

我有一个复杂的 SQL Server 查询,我正试图解决这个问题,但遇到了瓶颈,不确定最佳/最快的方法。我有一个良好的开端,但并非一帆风顺。

基本上,我需要创建一个 Select 语句,它会向我提供满足以下要求的 content_ids 列表:

  • field_id 为 12680 的唯一 content_idfield_values 匹配
  • content_idfield_id 为 12643,没有"is",但另一行具有相同的 content_idfield_id 12680 将此相同的 content_id 与"is"的值匹配
  • 仅在过去 24 小时内具有 create_date 的项目

数据库看起来像:

content_id | field_id | field_value                             | create_date
_________________________________________________________________________________________
12 | 12680 | 210b1183c3718142594425ab9538376ebb7f1e0 | 2012-02-21 22:44:51.167
12 | 12643 | Yes | 2012-02-21 22:44:51.167
13 | 12680 | 210b1183c3718142594425ab9538376ebb7f1e0 | 2012-02-21 22:44:51.167
13 | 12643 | | 2012-02-21 22:44:51.167

这是我到目前为止得到的:

SELECT DISTINCT Event1.content_id
FROM tblIVTextData AS Event1
JOIN tblIVTextData AS Event2
ON (Event1.content_id != Event2.content_id AND
Event1.field_value = Event2.field_value)
JOIN tblIVTextData AS Event3
ON(Event3.field_id = 12643 AND
Event3.field_value = 'Yes' AND
Event3.content_id = Event1.content_id)
WHERE Event1.field_id = 12680 AND
Event1.create_date > dateadd(hh, -300, getdate())

我在选择第一个匹配 field_values 的"is"时迷路了。关于如何完成此操作或性能改进的任何建议?

最佳答案

我不明白你的条件,也不明白示例查询(你说“24”小时作为条件,但在 SQL 中使用“300”小时)。

但是,我认为您可以通过聚合和 having 来做您想做的事条款。下面是一个示例,它使用 field_value <> 'Yes' 测试 12680 的一次出现和 12643 的至少一次出现。 :

select e.ContentId
from tblIVTextData e
where e.create_date > dateadd(hh, -24, getdate())
group by e.ContentId
having sum(case when field_id = 12680 then 1 else 0 end) = 1 and
sum(case when field_id = 12643 and field_value <> 'Yes' then 1 else 0 end) > 0

关于sql - 在 SQL Server 中匹配多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com