mysql - 针对特定场景使用 sql 查询检索数据

标签 mysql sql-server

我有一个如下所示的结果集/表

user_id |date_time |name | ----------|--------------------|------| 1 |2017 年 5 月 4 日 08:00 | jack | 2 |05/04/2017 09:00 |亚当斯 | 1 |2017 年 5 月 4 日 13:06 | jack | 1 |2017 年 5 月 4 日 13:45 | jack | 1 |2017 年 6 月 4 日 09:15 | jack | 1 |2017 年 7 月 4 日 10:00 | jack | 1 |10/04/2017 12:00 | jack | 2 |10/04/2017 12:30 |亚当斯 | 1 |2017 年 10 月 4 日 15:44 | jack |

我想对每一天的每个用户的 date_time 进行升序排序。 我期望结果如下:(我对第二行和最后一行有问题)。 4 月 5 日 Jack 的所有行应该放在一起,然后是 Adams;那天 Adamsdate_time 是否在 Jackdate_time 之间

user_id |date_time |name | ----------|--------------------|------| 1 |2017 年 5 月 4 日 08:00 | jack | 1 |2017 年 5 月 4 日 13:06 | jack | 1 |2017 年 5 月 4 日 13:45 | jack | 2 |05/04/2017 09:00 |亚当斯 | 1 |2017 年 6 月 4 日 09:15 | jack | 1 |2017 年 7 月 4 日 10:00 | jack | 1 |10/04/2017 12:00 | jack | 1 |2017 年 10 月 4 日 15:44 | jack | 2 |10/04/2017 12:30 |亚当斯 |


添加我用来获得此结果集的查询:

SELECT DISTINCT user_table.user_id
    ,diary_table.date_time
    ,user_table.NAME
FROM user_table
INNER JOIN diary_table ON user_table.user_id = diary_table.diary_user_id
    AND (
        date_time >= '06-Apr-2017 00:00:00'
        AND date_time <= '15-Apr-2017 23:59:59'
        )
    AND diar_user_id IN (
        SELECT DISTINCT diar_user_id
        FROM diary_table
        INNER JOIN event_table ON event_table.event_id = diary_table.diar_event_id
        WHERE event_table.event_name = 'Lunch'
            AND (
                date_time >= '06-Apr-2017 00:00:00'
                AND date_time <= '15-Apr-2017 23:59:59'
                )
        )
ORDER BY date_time ASC
    ,NAME
    ,ASC

最佳答案

通过使用日期列解决了这个问题。查询如下:

SELECT DISTINCT DISTINCT DATEADD(DAY, DATEDIFF(DAY, 0, date_time), 0) AS theDay
    ,user_table.user_id
    ,diary_table.date_time
    ,user_table.NAME
FROM user_table
INNER JOIN diary_table ON user_table.user_id = diary_table.diary_user_id
    AND (
        date_time >= '06-Apr-2017 00:00:00'
        AND date_time <= '15-Apr-2017 23:59:59'
        )
    AND diar_user_id IN (
        SELECT DISTINCT diar_user_id
        FROM diary_table
        INNER JOIN event_table ON event_table.event_id = diary_table.diar_event_id
        WHERE event_table.event_name = 'Lunch'
            AND (
                date_time >= '06-Apr-2017 00:00:00'
                AND date_time <= '15-Apr-2017 23:59:59'
                )
        )
ORDER BY theDay
    ,NAME ASC
    ,date_time ASC

关于mysql - 针对特定场景使用 sql 查询检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43250895/

相关文章:

php:计算某人在一个网站上停留多长时间并将数字插入数据库?

sql-server - 虚拟 SSIS 任务是个好主意吗

sql - IS NULL 与 <> 1 SQL 位

sql-server - 为什么全文索引选项呈灰色?

mysql - Percona 工具 pt-table-sync

mysql - 使用mysql根据前一行在记录集中设置修改标志

php - 应用从数据库获取DATETIME-时区问题

javascript - 为什么 vue.js 语句与 axios 开始较晚?

sql-server - 使用 Entity Framework Database.Create() 时指定 SQL Server 文件位置

sql - 计算两列非空的简洁方法(在 select 子句中)