【问题标题】:Getting last 30 days of records获取最近 30 天的记录
【发布时间】:2016-10-30 01:57:33
【问题描述】:

我在该表中有一个名为“Articles”的表,我有 2 列对于创建我要创建的查询至关重要。第一列是dateStamp 列,它是一个日期时间类型的列。第二列是 Counter 列,它是一个 int(255) 列。 Counter 列在技术上包含该特定领域的视图。

我正在尝试创建一个将生成最近 30 天记录的查询。然后它将根据查看次数最多对记录进行排序。此查询只会获取 10 条记录。我目前的查询是这样的:

SELECT *
FROM Articles
WHERE DATEDIFF(day, dateStamp, getdate()) BETWEEN 0 and 30
LIMIT 10
) TOP10
ORDER BY Counter DESC

此查询未显示任何记录,但我不明白我做错了什么。有什么建议吗?

【问题讨论】:

  • 如果您标记您的问题 MySQL,为什么要使用 SQL Server 语法?您问题中的查询不会在我能想到的任何数据库中运行。
  • day是MYSQL中的保留字;你应该重命名它以避免奇怪的问题。您可能还想在比较日期之前检查日期的格式。
  • @Sablefoste 再看一遍。它是关键字,但不是保留字。关键字列表中没有 (R)。

标签: mysql sql datediff


【解决方案1】:

查询的 MySQL 版本如下所示:

SELECT a.*
FROM Articles a
WHERE a.dateStamp >= CURDATE() - interval 30 day 
ORDER BY a.counter DESC
LIMIT 10;

您的查询产生了错误。您应该在修复查询之前查看该错误。

查询在 SQL Server 中看起来会有所不同。

【讨论】:

  • 我会尽快接受您的回答,但它正在成功运行。非常感谢!你能告诉我那个查询中的 a 是什么吗?
  • @user2896120 。 . .它是一个表别名。您应该使用它们和限定的列名。
  • 为了可读性和语义,请在第 2 行使用 AS 字样,使其显示为 FROM Articles AS a。但是,查询不是必需的。 ;)
  • @Sablefoste 。 . .我100%不同意。在FROM 子句中使用as 不会向查询添加任何内容。另一方面,将as 用于列别名非常重要。因此,请始终将它们用作列别名;从不用于表别名。
  • @GordonLinoff 尊敬的,我也不同意。他问a 是什么的事实意味着AS 这个词在帮助解释目的方面具有一定的实用性。在非常长和复杂的查询中,间距、格式化和使用别名可以帮助经验不足的开发人员更快地弄清楚发生了什么。这使得维护代码更容易。
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
相关资源
最近更新 更多