mysql - SQL:如何限制每行返回一个日期?

标签 mysql sql

我有一个 MDM,其中有 iPhone 报告其库存。我想运行一个查询来获取他们 2014 年的 IP 地址历史记录。我的目标是每天为每台设备获取一行。我目前有一个每天返回多行的查询,因为他们向 MDM 报告 IP 的频率很高。例如:

display_name   device_name         ip_address   date_entered
john_smith     john_smiths_iphone  10.1.0.122   2014-05-27 12:36:44
john_smith     john_smiths_iphone  10.1.0.122   2014-05-27 13:34:25
john_smith     john_smiths_iphone  10.1.0.122   2014-05-27 14:12:34
john_smith     john_smiths_iphone  10.1.0.122   2014-05-27 22:56:51
john_smith     john_smiths_iphone  10.1.0.122   2014-05-27 23:06:02

我只想要 2014 年每天每台设备的第一个条目。

这是我当前正在运行的查询:

SELECT iphone_details.display_name
,      iphone_details.device_name
,      iphone_details.ip_address
,      reports.date_entered 
FROM   iphone_details
,      reports 
WHERE  date_entered LIKE "%2014%"

iphone_details 表包含以下列:display_namedevice_nameip_address
reports 表有 date_entered

此查询导致返回的行过多。我从 mySQL Workbench 运行此查询时遇到错误。原来是因为我服务器上的/tmp 目录已满。因此,我通过 CLI 直接从 mySQL 服务器运行查询,并将结果输出到带有 INTO OUTFILE 的文件中,当我看到输出文件达到 22G 时,我停止了查询。

对于可能限制结果的查询,我将不胜感激。谢谢!

编辑: 我发现 iphone_detailsreports 都有一个“report_id”。可以用来JOIN他们吗?

最佳答案

虽然您的 JOIN 存在一些问题,即您在 reports 和 iphone_details 之间没有关系,因此将返回两个表中每一行的每个排列,以下内容将帮助您

SELECT 
    d.device_id,
    d.display_name, 
    d.device_name, 
    d.ip_address, 
    DATE(reports.date_entered) AS just_date_entered
FROM iphone_details AS d
INNER JOIN reports AS r
    ON r.report_id= d.report_id
    AND r.date_entered >= DATE('2014-01-01') 
    AND r.date_entered < DATE('2015-01-01')
GROUP BY
    d.device_id,
    d.ip_address,
    just_date_entered

首先,更改 date_entered BETWEEN AND(这将匹配到 2014-12-31 23:59:59)比在日期时间字段上进行全文搜索更有效。

其次,DATE(reports.date_entered) 仅允许提取日期时间字段的日期部分。

第三,GROUP BY 确保只返回设备、IP 地址和日期的不同组合。

(已编辑以反射(reflect)以下新信息)

关于mysql - SQL:如何限制每行返回一个日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437082/

相关文章:

mysql - 选择所有最大值 SQL 查询

php - Codeigniter 事件记录 LIKE 查询

mysql - 我在此过程查询中做错了什么?

SQL:将备份文件从复制格式转换为插入格式

mysql - HQL:两个值之间的最大值

触发器中的 MySQL 错误 "Unknown column in ' NEW'"

php - 使用 cron 作业作为后台 php

mysql - 从文本创建文章别名的 SQL 查询

python - 使用Python CGI和MySQL将用户输入的表单保存到MySQL表中

sql - PostGIS查询从具有与传递的地理坐标列表中的一个或多个点相交几何形状的多边形表中选择所有多边形