【问题标题】:SQL Server 2005 statements returning the same resultsSQL Server 2005 语句返回相同的结果
【发布时间】:2011-09-21 16:03:54
【问题描述】:

为什么这两个语句返回相同的结果?我正在查看一些出版物的订单总数和价格总和。第一个语句获取过去 24 小时的记录,第二个语句应该显示相同的总和,但从月初到当前日期。当我查看它们正在填充的网格视图时,看起来它们都在显示过去 24 小时的总和。有什么值得注意的吗?

SELECT pubName AS Publication, COUNT(*) AS Total, '$' + CONVERT(VARCHAR(12), SUM(CAST(price AS DECIMAL))) AS Price FROM [SecureOrders] WHERE DateTime >= DATEADD(day, -1, GETDATE()) GROUP BY pubName

SELECT pubName AS Publication, COUNT(*) AS Total, '$' + CONVERT(VARCHAR(12), SUM(CAST(price AS DECIMAL))) AS Price FROM [SecureOrders] WHERE DateTime >= DATEADD(DAY, 1-DAY(GETDATE()), DATEDIFF(DAY, 0, GETDATE())) GROUP BY pubName

【问题讨论】:

  • 尝试在 SSMS 中运行查询。如果您在本月 1 日和昨天这个时间之间有订单,他们应该会返回不同的结果。想知道您是否在代码中遇到了一些缓存问题。

标签: sql-server-2005 gridview


【解决方案1】:

如果其中一个应该是过去 24 小时,您应该查看小时数。

SELECT
    pubName AS Publication
    ,COUNT(*) AS Total
    ,'$' + CONVERT(VARCHAR(12), SUM(CAST(price AS DECIMAL))) AS Price
FROM [SecureOrders] 
WHERE DateTime >= DATEADD(hh, -24, GETDATE())
GROUP BY pubName

否则,两者的日期都非常好...假设 DateTime 列实际上是 DateTime,我会检查网格的数据源。

【讨论】:

  • 我已将正确的数据源附加到每个网格。为什么我无法为“本月至今”网格提取正确的信息,这真的很奇怪。但是感谢您的时间-这正是我在那边寻找的!
  • 我明白了!这只是使用了错误的数据库 - 我现在觉得自己很愚蠢!
【解决方案2】:

不确定为什么需要 DateDiff 子句。也许我错过了什么。

SELECT pubName AS Publication, COUNT(*) AS Total, '$' + CONVERT(VARCHAR(12), SUM(CAST(price AS DECIMAL))) AS Price FROM [SecureOrders] WHERE DateTime >= DATEADD (DAY, 1-DAY(GETDATE()), GETDATE()) GROUP BY pubName

编辑:忽略上述,我很密集(r)。

【讨论】:

  • 我想你没有运行这个并与 OP 的原始版本进行比较。
  • 噢!我们将把它归结为傍晚 sql 的危险,好吗。
猜你喜欢
  • 2013-06-13
  • 2016-01-16
  • 2014-01-15
  • 2011-06-24
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多