【问题标题】:Get only 1 result from SQL table (null or with date)从 SQL 表中仅获取 1 个结果(空或带日期)
【发布时间】:2014-01-29 19:58:44
【问题描述】:

我有一个表名 ItemMedia 有 2 行

ID   Source    FromDate     ToDate
----------------------------------
122  122A.jpg  NULL         NULL
122  122B.jpg  1/1/14       1/2/14

如果今天不在FromDateToDate 之间,我只想返回一行返回'FromDate' 和'ToDate' 中具有NULL 值的行

我试过这条 SQL 语句

IF (SELECT ItemID FROM ItemsMedia 
WHERE (FromDate<=GETDATE() AND ToDate>=GETDATE())) IS NOT NULL
BEGIN
    SELECT Source FROM ItemsMedia 
WHERE (FromDate<=GETDATE() AND ToDate>=GETDATE())
END
ELSE
BEGIN
    SELECT Source FROM ItemsMedia 
    WHERE (FromDate IS NULL AND ToDate IS NULL)
END

哪个有效,但源是其他相关表(ItemText、ItemDetails 等)的一部分,我需要将所有这些表作为一个结果返回。所以我从语句中得到的Source 是一个更大的 SQL 语句的一部分,所以我可以得到这个示例最终结果

ID    Source    Text        Details
----------------------------------
122   122B.jpg  Some Text   Some Details

【问题讨论】:

  • ms-sql? mysql?还有一个问题不是很清楚,相关表的定义是什么?
  • 我把它标记为 SQL server

标签: sql sql-server


【解决方案1】:

如果我理解正确,您只想返回带有一些优先规则的一行。你可以通过toporder by 做到这一点:

SELECT top 1 im.*
FROM ItemsMedia im
ORDER BY (case when FromDate <= GETDATE() AND ToDate >= GETDATE()
               then 1
               when FromDate IS NULL AND ToDate IS NULL
               then 2
               else 3
          end);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 2012-04-27
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多