4

我有一个带有列的 mysql 表useridcreatedon其中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

现在我想要上次创建的用户 ID是在 2013 年 9 月 8 日之前。正确答案是 userids 54,34

使用

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

返回 65,54,34 并使用

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

需要很多时间。

如何获取上次在 < 2013-09-08 上创建的行

4

4 回答 4

7

尝试

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

输出:

| 用户名 | 创建 |
|--------|-------------------|
| 34 | 2013 年 8 月 23 日 00:00:00+0000 |
| 54 | 2013 年 7 月 3 日 00:00:00+0000 |

这是SQLFiddle演示

于 2013-11-08T04:18:07.030 回答
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'
    )
于 2013-11-08T04:16:08.817 回答
0

尝试使用STR_TO_DATE()函数

SELECT userid FROM table  
WHERE createdon <= STR_TO_DATE('2013-09-08', '%Y-%m-%d')
于 2013-11-08T04:17:45.927 回答
0

您的查询是正确的,但可能您没有为createdon列使用正确的数据类型。检查它在此SQLFiddle中是否按预期工作:

SELECT userid
FROM mytable
WHERE createdon < '2013-09-08'
于 2013-11-08T04:20:35.343 回答