当前位置: 首页 > 知识库问答 >
问题:

如何在MySQL中计算最近一年的旧值表?

慕仲渊
2023-03-14

我在查询数据时遇到了问题,只能获取员工去年而不是所有年份的订单。

这是多年来的结果:

SELECT FirstName as 'Voornaam', Lastname as 'Familienaam', COUNT(Orders.OrderDate) as 'Behandelde Orders'
FROM Employees, Orders
WHERE ReportsTo IS NOT NULL
AND Employees.EmployeeID = Orders.EmployeeID
GROUP BY Orders.EmployeeID, FirstName, Lastname
ORDER BY Orders.EmployeeID

这给了

  • Voornaam Familienaam Behandelde订单

现在我想做同样的事情,但只在最近一年。在这里你可以看到一些表格顺序。它包含较旧的日期:

OrderID     CustomerID EmployeeID  OrderDate               RequiredDate            ShippedDate             ShipVia     Freight               ShipName                                 ShipAddress                                                  ShipCity        ShipRegion      ShipPostalCode ShipCountry
----------- ---------- ----------- ----------------------- ----------------------- ----------------------- ----------- --------------------- ---------------------------------------- ------------------------------------------------------------ --------------- --------------- -------------- ---------------
10248       VINET      5           1996-07-04 00:00:00.000 1996-08-01 00:00:00.000 1996-07-16 00:00:00.000 3           32,38                 Vins et alcools Chevalier                59 rue de l'Abbaye                                           Reims           NULL            51100          France
10249       TOMSP      6           1996-07-05 00:00:00.000 1996-08-16 00:00:00.000 1996-07-10 00:00:00.000 1           11,61                 Toms Spezialitäten                       Luisenstr. 48                                                Münster         NULL            44087          Germany
10250       HANAR      4           1996-07-08 00:00:00.000 1996-08-05 00:00:00.000 1996-07-12 00:00:00.000 2           65,83                 Hanari Carnes                            Rua do Paço, 67                                              Rio de Janeiro  RJ              05454-876      Brazil
10251       VICTE      3           1996-07-08 00:00:00.000 1996-08-05 00:00:00.000 1996-07-15 00:00:00.000 1           41,34                 Victuailles en stock                     2, rue du Commerce                                           Lyon            NULL            69004          France
10252       SUPRD      4           1996-07-09 00:00:00.000 1996-08-06 00:00:00.000 1996-07-11 00:00:00.000 2           51,30                 Suprêmes délices                         Boulevard Tirou, 255                                         Charleroi       NULL            B-6000         Belgium
10253       HANAR      3           1996-07-10 00:00:00.000 1996-07-24 00:00:00.000 1996-07-16 00:00:00.000 2           58,17                 Hanari Carnes                            Rua do Paço, 67                                              Rio de Janeiro  RJ              05454-876      Brazil
10254       CHOPS      5           1996-07-11 00:00:00.000 1996-08-08 00:00:00.000 1996-07-23 00:00:00.000 2           22,98                 Chop-suey Chinese                        Hauptstr. 31                                                 Bern            NULL            3012           Switzerland
10255       RICSU      9           1996-07-12 00:00:00.000 1996-08-09 00:00:00.000 1996-07-15 00:00:00.000 3           148,33                Richter Supermarkt                       Starenweg 5                                                  Genève          NULL            1204           Switzerland
10256       WELLI      3           1996-07-15 00:00:00.000 1996-08-12 00:00:00.000 1996-07-17 00:00:00.000 2           13,97                 Wellington Importadora                   Rua do Mercado, 12                                           Resende         SP              08737-363      Brazil
10257       HILAA      4           1996-07-16 00:00:00.000 1996-08-13 00:00:00.000 1996-07-22 00:00:00.000 3           81,91                 HILARION-Abastos                         Carrera 22 con Ave. Carlos Soublette #8-35                   San Cristóbal   Táchira         5022           Venezuela
10258       ERNSH      1           1996-07-17 00:00:00.000 1996-08-14 00:00:00.000 1996-07-23 00:00:00.000 1           140,51                Ernst Handel                             Kirchgasse 6                                                 Graz            NULL            8010           Austria
10259       CENTC      4           1996-07-18 00:00:00.000 1996-08-15 00:00:00.000 1996-07-25 00:00:00.000 3           3,25                  Centro comercial Moctezuma               Sierras de Granada 9993                                      México D.F.     NULL            05022          Mexico
10260       OTTIK      4           1996-07-19 00:00:00.000 1996-08-16 00:00:00.000 1996-07-29 00:00:00.000 1           55,09                 Ottilies Käseladen                       Mehrheimerstr. 369                                           Köln            NULL            50739          Germany

我试过:

    SELECT FirstName as 'Voornaam', Lastname as 'Familienaam', COUNT(Orders.OrderDate) as 'Behandelde Orders'
FROM Employees, Orders
WHERE ReportsTo IS NOT NULL
AND Employees.EmployeeID = Orders.EmployeeID
GROUP BY Orders.EmployeeID, FirstName, Lastname
ORDER BY Orders.EmployeeID
HAVING Orders.OrderDate = Max(Year(Orders.OrderDate))


SELECT FirstName as 'Voornaam', Lastname as 'Familienaam', COUNT(Orders.OrderDate) as 'Behandelde Orders'
FROM Employees, Orders
WHERE ReportsTo IS NOT NULL
AND Orders.OrderDate = Max(Year(Orders.OrderDate)))
AND Employees.EmployeeID = Orders.EmployeeID
GROUP BY Orders.EmployeeID, FirstName, Lastname
ORDER BY Orders.EmployeeID

SELECT FirstName as 'Voornaam', Lastname as 'Familienaam', COUNT(Orders.EmployeeID) as 'Behandelde Orders'
FROM Employees, Orders
WHERE ReportsTo IS NOT NULL
AND Orders.OrderDate = Max(year(Orders.OrderDate))
AND Employees.EmployeeID = Orders.EmployeeID
GROUP BY Orders.EmployeeID, FirstName, Lastname
ORDER BY Orders.EmployeeID

还有一些其他的变化。

共有1个答案

仉姚石
2023-03-14

首先,切勿在FROM子句中使用逗号。始终使用正确的显式连接语法。

以下版本假设您需要每人最近的日历年:

SELECT FirstName as Voornaam, Lastname as Familienaam,
       COUNT(o.OrderDate) as BehandeldeOrders
FROM Employees e JOIN
     Orders o
     ON e.EmployeeID = o.EmployeeID
WHERE ReportsTo IS NOT NULL AND
      YEAR(o.OrderDate) = (SELECT YEAR(MAX(o2.OrderDate))
                           FROM Orders o2
                           WHERE o2.EmployeeId = o.EmployeeId
                          )
GROUP BY o.EmployeeID, FirstName, Lastname
ORDER BY o.EmployeeID;

如果需要最近一年的总体数据,可以删除相关子句(子查询中的WHERE)。

 类似资料:
  • 问题内容: 这是我的数据 是独特的。我需要显示每张卡的所有详细信息和总时间,例如: 问题答案: SELECT卡号,用户名,表名,总和(小时)从表_1 GROUP BY卡号,用户名,表名开​​始

  • 问题内容: 如果我的出生日期以表格的形式存储在表格中,并且从当前日期中减去该日期,那么返回的日期格式是什么? 如何使用这种返回的格式来计算某人的年龄? 问题答案: 如果该值存储为DATETIME数据类型: 考虑leap年时不太精确:

  • 问题内容: 我在mysql表中有一列,其数据类型为INT(11)。 如何搜索以获取此列中出现次数最多的前10个值? 问题答案:

  • 问题内容: 我需要根据订单的要求交货日期来安排Postgres查询中的某些项目。因此,例如,该订单在星期一(例如20120319)有一个请求的交货,并且该订单需要在前一个工作日(20120316)进行准备。 关于最直接方法的想法?我愿意添加日期表。我认为有比使用大量case语句更好的方法:SELECT EXTRACT(DOW FROM TIMESTAMP‘2001-02-16 20:38:40’)

  • 本文向大家介绍PHP计算近1年的所有月份,包括了PHP计算近1年的所有月份的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码:  效果图: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 问题内容: 我想以Java方法的整数形式返回年龄(以年为单位)。我现在所拥有的是getBirthDate()返回Date对象(带有出生日期;的以下内容: 但是由于不赞成使用getYear(),所以我想知道是否有更好的方法可以做到这一点?我什至不确定这是否能正常工作,因为我还没有进行单元测试。 问题答案: JDK 8使这个变得轻松而优雅: 一个JUnit测试以证明其用法: 现在每个人都应该使用JDK