'NOT GREATER THAN'条件Mysql

时间:2013-11-08 04:12:07

标签: mysql sql

我有一个包含userid列和createdon列的mysql表,其中createdon列的数据类型为DATE

---------------------------------------------------------------------------------
ID                      UserId                         CreatedOn
1                         65                           2013-06-13 
2                         54                           2013-07-03
3                         34                           2013-08-23
4                         65                           2013-09-13 
5                         89                           2013-09-13

现在我想要在2013-09-08之前创建 last 的用户标识。正确的答案是用户ID 54,34

使用

select userid from table  where createdon <'2013-09-08'

返回65,54,34和usind

select userid from table where userid notin (select userid from table where createdon > '2013-09-07')

花了很多时间。

如何获取最后创建的行&lt; 2013年9月8日

4 个答案:

答案 0 :(得分:6)

尝试

SELECT UserID, MAX(CreatedOn) CreatedOn
  FROM table1
 GROUP BY UserId
HAVING CreatedOn < '2013-09-08'

输出:

| USERID |                     CREATEDON |
|--------|-------------------------------|
|     34 | August, 23 2013 00:00:00+0000 |
|     54 |   July, 03 2013 00:00:00+0000 |

这是 SQLFiddle 演示

答案 1 :(得分:0)

你的期望是错误的。您发布的表格的第一行符合您的条件('2013-06-'13' < '2013-09-08')。因此65,54,34的结果集符合预期。

误解了这个问题。

你想要的是:

    SELECT DISTINCT
       UserId
    FROM
       tbl outerTbl
    WHERE NOT EXISTS (
         SELECT *
         FROM tbl innerTbl
         WHERE
             outerTbl.UserId = innerTbl.UserId
             AND innerTbl.createdOn >= '2013-09-08'
    )

答案 2 :(得分:0)

尝试使用STR_TO_DATE()功能

SELECT userid FROM table  
WHERE createdon <= STR_TO_DATE('2013-09-08', '%Y-%m-%d')

答案 3 :(得分:0)

您的查询是正确的,但可能您没有为createdon列使用正确的数据类型。检查它在SQLFiddle

中是否按预期工作
SELECT userid
FROM mytable
WHERE createdon < '2013-09-08'