有关过滤数据的SQL查询帮助

时间:2017-12-12 13:58:50

标签: mysql sql mariadb

我希望通过PositionDateTime(即日期)从表位置顺序生成所选列的列表。但是按照降序排列希望只接受特定年份的日期。

下面的sql查询确实以参考日期的降序显示数据。但是我想执行一个过滤日期的sql查询,即不是当前年份(即2017年)。例如,我不想从下表中包括2018年和2005年的日期。我该如何执行这样的查询。

SELECT Lat, Lng, PositionDateTime FROM Position ORDER BY PositionDateTime DESC Limit 30 ;

当前表格结果

Lat     | Lng     | PositionDateTime    |
+---------+---------+---------------------+
| 47.1168 | 8.19226 | 2018-12-11 13:19:17 |
| 47.0996 | 7.77753 | 2018-12-11 12:55:29 |
| 47.0622 | 7.45892 | 2017-12-11 12:49:14 |
| 46.8484 | 7.33423 | 2017-12-11 12:48:10 |
| 47.2489 | 7.57043 | 2017-12-11 12:29:03 |
| 47.2899 | 8.25708 | 2017-12-11 11:37:41 |
|  47.409 | 7.77917 | 2017-12-11 10:57:42 |
| 47.3941 | 8.68005 | 2017-12-11 10:41:24 |
|       0 |       0 | 2017-12-11 10:39:12 |
|       0 |       0 | 2017-11-23 15:22:25 |
|       0 |       0 | 2017-11-23 12:32:58 |
|       0 |       0 | 2017-11-23 10:24:10 |
|       0 |       0 | 2017-11-20 09:29:36 |
|       0 |       0 | 2017-11-20 09:25:35 |
|       0 |       0 | 2017-11-20 09:25:18 |
| 47.5031 | 8.69181 | 2017-11-15 16:25:08 |
| 47.4799 | 8.48702 | 2005-11-15 16:24:41   

1 个答案:

答案 0 :(得分:1)

如果在where子句中添加YEAR(PositionDateTime),则可以按年度过滤结果:

SELECT Lat, Lng, PositionDateTime FROM Position 
WHERE YEAR(PositionDateTime) IN (2015,2017) #Enter the years you want here.
ORDER BY PositionDateTime DESC Limit 30 ;

或者仅显示当前年度的结果,请尝试:

SELECT Lat, Lng, PositionDateTime FROM Position 
WHERE YEAR(PositionDateTime) = YEAR(NOW()) 
ORDER BY PositionDateTime DESC Limit 30 ;

要仅显示当前年度和特定月份的结果,请尝试以下操作:

SELECT Lat, Lng, PositionDateTime FROM Position 
WHERE YEAR(PositionDateTime) = YEAR(NOW()) 
AND MONTH(PositionDateTime) = 6 # 6 = June, you can adjust this.
ORDER BY PositionDateTime DESC Limit 30 ;