首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL日期相关查询

问MySQL日期相关查询
EN

Stack Overflow用户
提问于 2012-07-13 02:52:55
回答 2查看 106关注 0票数 0

我在理解如何最好地处理这个问题时遇到了问题。

我有一张叫user_files的桌子。一个用户可以有许多文件。我想要获取在过去一年中没有修改过任何文件的用户列表。如果用户在过去一年中至少修改了一个文件,则应排除该用户。

代码语言:javascript
复制
  Table: user_files
  file_id | user_id | date_modified
  ----------------------------------
  1        100       2010-10-01
  2        100       2010-11-13
  3        100       2011-01-01
  4        101       2010-10-01
  5        101       2010-06-13
  6        101       2011-04-12
  7        101       2012-04-01

预期的结果将只列出user_id 100。

下面是我使用过的一些糟糕的sql。我的想法是找到最近修改其文件的所有用户,然后找到未包括在该列表中的用户。

代码语言:javascript
复制
    select user_id from users where user_id not in
    (
      select user_id from 
      (
        select user_id, story_id, max(date_modified) from user_files 
        where DATE_FORMAT(date_modified, '%Y-%m-%d') >= DATE_SUB(curdate(), INTERVAL 1 YEAR)
        group by user_id
      )x
    )

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-13 02:58:03

代码语言:javascript
复制
SELECT DISTINCT(f.user_id)
FROM user_files f
WHERE NOT EXISTS(SELECT 1
                 FROM user_files ff
                 WHERE ff.user_id = f.user_id
                 AND ff.date_modified >= DATE_SUB(curdate(), INTERVAL 1 YEAR))

http://sqlfiddle.com/#!2/64e7f/1

或,

代码语言:javascript
复制
SELECT user_id
FROM user_files
GROUP BY user_id
HAVING MAX(date_modified) < DATE_SUB(curdate(), INTERVAL 1 YEAR)

http://sqlfiddle.com/#!2/64e7f/4

票数 2
EN

Stack Overflow用户

发布于 2012-07-13 02:57:43

您可以使用这个简单的解决方案:

代码语言:javascript
复制
SELECT a.user_id
FROM users a
LEFT JOIN user_files b ON 
    a.user_id = b.user_id AND 
    b.date_modified >= CURDATE() - INTERVAL 1 YEAR
WHERE b.user_id IS NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11458664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档