【问题标题】:Find count of rows that don't contain a particular date?查找不包含特定日期的行数?
【发布时间】:2013-03-19 04:40:53
【问题描述】:

我正在尝试计算在特定日期(例如 13 年 10 月 25 日)没有借出视频的人数。我有一个 dateoutdatein 字段,但我一生无法确定要采取哪些步骤才能继续,因为我没有可使用的范围,只有具体的日期。

我想如果我能找出那天有多少物品出去了,那么我就不能查询了,但我仍然被原来的问题困住了。

最简单的检查方法是什么?

我正在使用 SQL 开发人员 该表由 ItemNo、CardNo、DateOut、DateIn 组成。

我在想一个 BETWEEN 但 AFAIK,它只适用于一个范围并且使用相同的日期似乎不起作用。我不太了解日期如何工作 TBH。

理想情况下,最终结果将是在特定日期没有 ItemNo 的所有唯一 CardNo 的计数。

【问题讨论】:

  • 另外,表格方案是什么?
  • 需要更多关于您的问题的描述,不了解您真正想从查询中得到什么,请提供架构和预期结果。

标签: sql


【解决方案1】:

要查找在特定日期没有借出视频的人数,您需要知道有多少人有卡,以及在特定日期有多少人有视频借出。

你似乎有两张桌子:

  • 持卡人:卡号,...
  • Lo​​anItem:CardNo、ItemNo、DateIn、DateOut、...

所以,持卡人的数量是:

SELECT COUNT(*) FROM CardHolder

2013 年 10 月 25 日有一件或多件物品被借出的人数是:

SELECT COUNT(DISTINCT CardNo)
  FROM LoanItem
 WHERE DATE '2013-10-25' BETWEEN DateOut AND DateIn

所以,你需要:

SELECT (SELECT COUNT(*) FROM CardHolder) -
       (SELECT COUNT(DISTINCT CardNo)
          FROM LoanItem
         WHERE DATE '2013-10-25' BETWEEN DateOut AND DateIn
       )

您可能需要为 SELECT from 提供一个表——这取决于您的 DBMS。

SELECT (SELECT COUNT(*) FROM CardHolder) -
       (SELECT COUNT(DISTINCT CardNo)
          FROM LoanItem
         WHERE DATE '2013-10-25' BETWEEN DateOut AND DateIn
       )
  FROM Dual;

或任何其他 1 行表。

【讨论】:

  • 感谢您的帮助。这为我提供了一些可以帮助我了解更多信息的东西。
【解决方案2】:

只是基于猜测您可能需要什么,我当然不完全理解您的问题。

    select count(distinct people) 
    from tableName 
    where '25-OCT-2013' not between DateOut and DateIN

【讨论】:

  • 非常感谢您的宝贵时间。以后我会尝试提供更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2013-10-18
  • 2014-12-16
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多