1

如何在找到某个字段值之前从表中获取最后(谈论日期时间)记录?
如果我有这张桌子:

+----+---------------------+-------+-----------+
| id | date                |  flag | data      |
+----+---------------------+-------------------+
|  1 | 2008-09-01 15:02:00 |   1   | ....    . |
|  2 | 2008-09-01 16:15:00 |   5   | ....    . |
|  3 | 2008-09-01 16:19:00 |   4   | ....    . |
|  4 | 2008-09-01 16:20:00 |   4   | ....    . |
|  5 | 2008-09-01 16:20:00 |   5   | ....    . |
|  6 | 2008-09-01 18:18:00 |   9   | ....    . |
+----+---------------------+-------+-----------+  

我想在找到“4”标志字段值之前获取最后的记录,我的意思是:

SELECT * FROM mytable WHERE..... ORDER BY id DESC

+----+---------------------+-------+-----------+
| id | date                |  flag | data      |
+----+---------------------+-------------------+
|  5 | 2008-09-01 18:18:00 |   9   | ....    . |
|  4 | 2008-09-01 16:20:00 |   5   | ....    . |
+----+---------------------+-------+-----------+ 

我怎么才能得到它?

补充:另外我会知道如何获取包含第一次出现“4”的记录
补充:标志字段没有有序值
谢谢

4

2 回答 2

2

因此,由于它是关于降序的,只需执行以下操作:

SELECT * FROM mytable WHERE flag>4 ORDER BY id DESC

关于您的“添加”-就 SQL 而言没有“第一”记录,因为当我们谈到顺序时它们都是平等的。即您应该首先在相同flag的值内指定顺序,然后您将能够确定哪一行是第一行。

根据评论

如果我们谈论的是使用date字段排序,那将是:

1) 获取date字段大于-flag 行最大值date的所有记录:4

SELECT 
  * 
FROM 
  mytable 
WHERE 
  `date`>(SELECT MAX(`date`) FROM mytable WHERE flag=4) 
  AND 
  flag!=4

2) 获取date字段大于 -flag 行最大值date的所有记录4并包含此行:

SELECT 
  * 
FROM 
  mytable 
WHERE 
  `date`>(SELECT MAX(`date`) FROM mytable WHERE flag=4)
  AND
    flag!=4
UNION ALL
SELECT 
  * 
FROM 
  mytable 
WHERE 
  `date`=(SELECT MAX(`date`) FROM mytable WHERE flag=4) 
  AND 
  flag=4

-注意,在第二种情况下,我们不能这样做,SELECT * FROM mytable WHERE date>=(SELECT MAX(date) FROM mytable WHERE flag=4)因为可能有行的字段与-flag 行date的最大值相同,但带有另一个标志。date4

于 2013-10-23T13:05:39.957 回答
2

如果您的 ID 始终是有序的,您可以使用以下内容:

SELECT *
FROM mytable
WHERE id>(SELECT MAX(id) FROM mytable WHERE flag="4")

或者您可以使用日期时间字段:

SELECT *
FROM mytable
WHERE
  date>=(SELECT MAX(date) FROM mytable WHERE flag="4")
  AND flag!="4"

以及第一次出现“4”的记录:

SELECT *
FROM mytable
WHERE date=(SELECT MIN(date) FROM mytable WHERE flag="4")
于 2013-10-23T13:09:31.743 回答