MySQL仅选择2天以上的最新记录(时间戳)

jmd9qs

我有一个人员表,一个单位表和一个健康表(如下所述)。基本上,在我的工作中,我们必须检查一下人,如果两天都没有看到他们,我们会去找他们...我想要的是能够从健康表中选择所有记录,超过两天,但只有最新的(因为每人每天可能会有多个条目,这是我想要的方式,因为在该wellness.username字段中,您可以告诉谁看到了谁,何时看到了)。

People 
+------------+-------------+------+-----+-------------------+----------------+
| Field      | Type        | Null | Key | Default           | Extra          |
+------------+-------------+------+-----+-------------------+----------------+
| id         | int(11)     | NO   | PRI | NULL              | auto_increment |
| fname      | varchar(32) | NO   |     | NULL              |                |
| lname      | varchar(32) | NO   |     | NULL              |                |
| dob        | date        | NO   |     | 0000-00-00        |                |
| license_no | varchar(24) | NO   |     | NULL              |                |
| date_added | timestamp   | NO   |     | CURRENT_TIMESTAMP |                |
| status     | varchar(8)  | NO   |     | Allow             |                |
+------------+-------------+------+-----+-------------------+----------------+

Units
+----------+-------------+------+-----+---------+----------------+ 
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| number   | varchar(3)  | NO   |     | NULL    |                |
| resident | int(11)     | NO   | MUL | NULL    |                |
| type     | varchar(16) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

+--------------+-------------+------+-----+-------------------+----------------+
| Field        | Type        | Null | Key | Default           | Extra          |
+--------------+-------------+------+-----+-------------------+----------------+
| wellness_id  | int(11)     | NO   | PRI | NULL              | auto_increment |
| people_id    | int(11)     | NO   |     | NULL              |                |
| time_checked | timestamp   | NO   |     | CURRENT_TIMESTAMP |                |
| check_type   | varchar(1)  | NO   |     | NULL              |                |
| username     | varchar(16) | NO   |     | jmd9qs            |                |
+--------------+-------------+------+-----+-------------------+----------------+

units表是丑陋的,我知道,但它很快就会改变; 就目前而言,resident引用people.id

这里是我的最低工作实例,只给了我,即使有多个一个结果peoplewellness有一个time_checked行超过2天以上。我得到的一个结果更像是4-1 / 2天大。

select w.wellness_id, p.id, p.lname, p.fname, u.number, u.type,
w.time_checked, w.check_type, w.username 
from people p 
    left join units u on p.id = u.resident
    right join wellness w on p.id = w.people_id 
    WHERE w.time_checked <= DATE_ADD(CURDATE(), INTERVAL -2 DAY)
order by w.time_checked asc;

我试图让那些超过两天的最新的记录,但只有1%people是在wellness表中。我加入了所有其他内容,因为我需要它来显示PHP记录。

对不起,我的问题很棘手,希望它足够清楚!

编辑-样本数据:

+------+------+--------+---------------------+------------+----------+
| w_id | id   | number | time_checked        | check_type | username |
+------+------+--------+---------------------+------------+----------+
|  100 |    2 | 425    | 2013-08-23 21:03:00 | s          | jmd9qs   |
|  101 |    2 | 425    | 2013-08-25 05:41:01 | s          | jmd9qs   |
|   91 |    2 | 425    | 2013-08-20 19:52:23 | s          | jmd9qs   |
|   83 |    4 | 416    | 2013-08-23 20:12:29 | s          | jmd9qs   |
|   76 |    5 | 408    | 2013-08-23 20:11:21 | s          | jmd9qs   |
|   62 |    6 | 327    | 2013-08-23 20:06:13 | s          | jmd9qs   |
|   18 |    7 | 204    | 2013-08-23 19:43:58 | s          | jmd9qs   |
|   31 |    8 | 219    | 2013-08-23 19:51:11 | s          | jmd9qs   |
|   97 |    9 | 432    | 2013-08-23 20:16:39 | o          | jmd9qs   |
|   44 |   10 | 309    | 2013-08-23 19:55:45 | s          | jmd9qs   |
+------+------+--------+---------------------+------------+----------+
术语

恕我直言,RIGHT JOINpeoplewellness没有意义,因为当您有一个人wellness但不在people桌子上时,就不会出现这种情况但是反之亦然。您有一个新朋友,但还没有任何有关他或她的健康信息。

话虽这么说,您的查询可能看起来像这样

SELECT z.wellness_id, p.id, z.time_checked, z.check_type, z.username 
  FROM people p JOIN units u
    ON p.id = u.resident  LEFT JOIN
(
  SELECT w.*
    FROM
  (
    SELECT people_id, MAX(time_checked) time_checked
      FROM wellness
     GROUP BY people_id
  ) q JOIN wellness w 
      ON q.people_id = w.people_id
     AND q.time_checked = w.time_checked
) z 
    ON p.id = z.people_id
 WHERE COALESCE(time_checked, 0) < CURDATE() - INTERVAL 2 DAY

这是SQLFiddle演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据最新时间戳选择记录

来自分类Dev

仅获取最新的时间戳条目 MYSQL

来自分类Dev

如何选择具有最新时间日期戳的记录

来自分类Dev

仅选择最新记录

来自分类Dev

MYSQL:仅选择最新记录(在左侧联接表上)

来自分类Dev

仅选择每月的最新记录

来自分类Dev

获取SQLite中最新时间戳的记录

来自分类Dev

获取SQLite中最新时间戳的记录

来自分类Dev

从SQLite表中选择一条记录-并检查其时间戳是否为最新的

来自分类Dev

sql查询,其中时间戳是15天以上

来自分类Dev

从时间戳为最新的表中选择

来自分类Dev

根据列选择最新的时间戳

来自分类Dev

Mysql选择当天或第二天之间的最新记录

来自分类Dev

mysql通过时间戳获取最新记录而无需子查询

来自分类Dev

即使有2条记录具有相同的时间戳,也可以获取最新的条目

来自分类Dev

仅选择每个月的最新记录

来自分类Dev

选择具有最新时间戳记的记录

来自分类Dev

MYSQL-从2行中选择最新时间

来自分类Dev

选择 Unix 时间戳落在指定小时或天的位置

来自分类Dev

mysql选择时间戳距离为3分钟的记录

来自分类Dev

MySQL查询以选择比x天更新的记录

来自分类Dev

MySQL记录时间戳已更改

来自分类Dev

CQL-按ID和最新时间戳获取记录

来自分类Dev

仅更新MySql表中的时间戳

来自分类Dev

仅获取MySQL中JOIN的最新记录

来自分类Dev

2条记录时间戳sql的区别

来自分类Dev

Access SQL-如何获取最新记录和时间戳之前的最新记录?

来自分类Dev

Hive Data根据时间戳选择最新值

来自分类Dev

使用MORE命令选择具有最新时间戳的文件