简体   繁体   English

在长 SQL 查询中的日期之间

[英]Between date in long SQL query

I have a query where I get the USER ID and the count of rows from the most common user id in the table 'tickets'.我有一个查询,可以从表“tickets”中获取用户 ID 和最常见用户 ID 的行数。 But now, I want to do the same query but it needs to search between 2 datetimes I insert.但是现在,我想做同样的查询,但它需要在我插入的 2 个日期时间之间进行搜索。 ( there is an column with a datetime value ('created_at')) (有一列带有日期时间值('created_at'))

This is the code I have:这是我的代码:

SELECT created_by,COUNT(*) as tickets_count
FROM tickets
WHERE created_at
group by created_by having count(*) =(select max(tickets_count) from (select created_by,count(*) as tickets_count from tickets group by created_by) tickets)

This is the table:这是表:

点击图片

I already tried:我已经尝试过:

SELECT created_by, COUNT(*) as tickets_count
FROM tickets
WHERE created_at BETWEEN '2021-07-25 10:00:00' AND ' 2021-07-30 12:00:00'
group by created_by
having count(*) =(select max(tickets_count) from (select created_by,count(*) as tickets_count from tickets group by created_by) tickets)

But it gave me 0 rows, which isn't true because ID 6 is between those 2 days.但它给了我 0 行,这是不正确的,因为 ID 6 在这两天之间。

If you are only looking for one user, you can use ORDER BY and LIMIT :如果您只查找一位用户,您可以使用ORDER BYLIMIT

SELECT created_by, COUNT(*) as tickets_count
FROM tickets
WHERE created_at BETWEEN '2021-07-25 10:00:00' AND ' 2021-07-30 12:00:00'
GROUP BY created_by
ORDER BY COUNT(*) DESC
LIMIT 1;

If you want all users when there are duplicates, use window functions:如果您希望所有用户都存在重复项,请使用窗口函数:

SELECT t.*
FROM (SELECT created_by, COUNT(*) as tickets_count,
             RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum
      FROM tickets
      WHERE created_at BETWEEN '2021-07-25 10:00:00' AND ' 2021-07-30 12:00:00'
      GROUP BY created_by
     ) t
WHERE seqnum = 1;

试试这个 :

SELECT created_by,COUNT(*) as tickets_count FROM tickets WHERE date(created_at) BETWEEN date('2021-07-25 10:00:00') AND date(' 2021-07-30 12:00:00') group by created_by having count(*) =(select max(tickets_count) from (select created_by,count(*) as tickets_count from tickets group by created_by) tickets) ```

You can try created_at >= and created_at <=你可以试试 created_at >= 和 created_at <=

SELECT created_by ,COUNT(*) as tickets_count 
FROM tickets WHERE created_at >='2021-07-25 10:00:00' and created_at <='2021-07-30 12:00:00' 
group by created_by having count(*) =( select max(tickets_count) 
from (
select created_by,count(*) as tickets_count 
from tickets group by created_by ) tickets ) ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM