【问题标题】:two query results in datetime compare in sqlsql中日期时间比较的两个查询结果
【发布时间】:2014-04-15 10:58:01
【问题描述】:

我有两个 sql 查询。

SELECT 
    DATE_FIRST_TABLE
FROM
    FIRST_TABLE

SELECT 
    DATE_SECOND_TABLE
FROM
    SECOND_TABLE

以上两个查询可能返回单个或多个记录。 如果任何日期值大于第一个查询结果的任何日期值,我需要检查第二个查询结果,那么它将评估为 true。

我需要一些建议。

谢谢。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

这是你想要的吗?

select 'true'
from second_table
where date_second_table > (select max(date_first_table) from first_table)

语句:“我需要检查第二个查询结果,如果任何日期值大于第一个查询结果的任何日期值,那么它将评估为真。”这有点难以遵循逻辑。当第二个查询的值大于第一个查询的所有值时,上述返回 'true'。

答案可能是:

select max('true')
from second_table
where date_second_table > (select min(date_first_table) from first_table)

一个关键的补充是max() 函数,它将它变成一个聚合函数,因此它返回一行。

编辑:

您的问题对于“假”情况下的处理方式含糊不清。正如您在 cmets 中建议的那样,一个答案是:

select (case when count(*) > 0 then 1 else 0 end)
from second_table
where date_second_table > (select min(date_first_table) from first_table);

类似的方法是使用显式join。虽然这会表现得不太好,但它可能会更好地捕捉逻辑:

select (case when count(*) > 0 then 1 else 0 end)
from first_table t1 join
     second_table t2
     on t1.date_first_table > t2.date_second_table;

【讨论】:

  • 将无法正常工作。只有当第二个表中的所有数据都大于第一个表中的最大值时,这才会返回 true。如果第二个表只有一个行值 2,但第一个表有 1 和 3,则此查询不会返回 true。
  • select CASE WHEN COUNT(*)>0 THEN 1 ELSE 0 END from second_table where date_second_table > (select max(date_first_table) from first_table) ..这里 count = 1 表示真,0 表示假..我认为它会起作用。如果日期值大于第一个表的最大值,则在第二个表中它大于第一个表的所有日期。
  • @GordonLinoff ..你能编辑你的答案吗。这样我就可以接受了。
  • 更正:如果第二个结果集的任何日期值大于第一个结果集的最小值,那么它将返回 1,否则返回 0。这就是我想要的。
【解决方案2】:
SELECT DATE_SECOND_TABLE FROM SECOND_TABLE WHERE DATE_SECOND_TABLE > (SELECT DATE_FIRST_TABLE FROM FIRST_TABLE)

当你说“它将评估为真”时,你的意思是它可能会返回结果

【讨论】:

  • 我的意思是我需要检查第二个结果集中的所有记录,如果任何记录的日期值大于第一个结果集中的任何记录,那么 case 语句将返回 true 否则返回 false
猜你喜欢
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2020-01-14
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多