【问题标题】:How to obtain all the tuples after a certain date in sql?如何在sql中获取某个日期之后的所有元组?
【发布时间】:2018-11-02 23:42:52
【问题描述】:

我要获取2014年4月下半月请求数最多的男员工。

我有这些表:

  • 员工(员工 ID、名字、姓氏、性别)
  • 工作场所(CompanyID、EmployeeID、CompanyName)
  • 附加信息(ExtraID、CompanyID、请求、描述、日期)

Extras.Requests 是一个字符串,而不是数字。

我的 SQL 尝试如下所示:

SELECT 
    Employee.FirstName, Employee.LastName, 
    SUM(COUNT(Extras.ExtraID) 
FROM 
    Employee 
INNER JOIN
    (Workplace 
INNER JOIN 
    Extras ON Workplace.CompanyID = Extras.CompanyID) 
    ON Workplace.EmployeeID = Employee.EmployeeID 
WHERE 
    Employee.Gender = "male" 
    AND Extras.Date BETWEEN #4/15/2014# AND #4/30/2014#
SORT BY 
    SUM(COUNT(Extras.ExtraID) DESC;
LIMIT 1;

我不确定我的查询是否正确,在此先感谢。

【问题讨论】:

  • 并将日期存储为日期
  • @strawberry 你删除了一个嵌套连接,从而改变了问题
  • 您使用的是什么 DBMS?该问题已标记为 mysql 和 ms-access。
  • 删除了冲突的产品标签。请添加您使用的那个。 (这可能是 ms 访问)

标签: sql subquery


【解决方案1】:

您的 querySUM(COUNT(...)) 存在多个问题,不允许像这样嵌套聚合函数

您还需要一个GROUP BY 子句才能将聚合函数与非聚合列(在您的查询中为Employee.FirstName, Employee.LastName)一起使用。

排序由ORDER BY 子句执行

您的原始查询包含可能产生意外结果的嵌套内连接。

FROM Employee 
   INNER JOIN(Workplace 
   INNER JOIN Extras ON Workplace.CompanyID=Extras.CompanyID
             ) ON Workplace.EmployeeID=Employee.EmployeeID 

虽然允许嵌套连接,但它很少使用,我建议您避免使用它。

我希望查询看起来更像这样

SELECT
    Employee.FirstName, Employee.LastName, COUNT(Extras.ExtraID)
FROM ((Employee
    INNER JOIN Workplace
        ON Workplace.EmployeeID = Employee.EmployeeID)
    INNER JOIN Extras
        ON Workplace.CompanyID = Extras.CompanyID)
WHERE Employee.Gender = "male"
    AND Extras.Date BETWEEN #4/15/2014# AND #4/30/2014#
GROUP BY
    Employee.FirstName
   ,Employee.LastName
ORDER BY
    COUNT(Extras.ExtraID) DESC;
LIMIT 1;

自从我使用 access 已经有好几年了,我认为它仍然需要在 from 子句中使用括号,如上所示。在大多数 SQL 实现中,它们不是必需的,文字更常见的是使用单引号,例如WHERE Employee.Gender = 'male'.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2023-03-19
    • 2017-06-12
    • 2013-05-09
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多