【问题标题】:How to find the maximum value among a range of count如何在一个计数范围内找到最大值
【发布时间】:2020-09-28 08:56:16
【问题描述】:

这是我第一次询问有关 stackoverflow 的问题,并且我最近使用了 MySQL。
我需要一个查询,让我能够从一系列计数中找到具有最大值的查询。
我会给你一个例子,显示一个“伪代码”显然不起作用:

/* function TicketCount(:time){ */
SELECT COUNT(`idT`)
FROM `TICKET`
WHERE `startTime`<=(TIME(':time')+INTERVAL 10 MINUTE) AND `startTime`>(TIME(':time')-INTERVAL 35 MINUTE);
/* } */

SELECT MAX( /* TicketCount( from (TIME(':time')-INTERVAL 35 MINUTE) to (TIME(':time')+INTERVAL 10 MINUTE) ) */ );



举个例子,我现在的桌子是这样的:
+-----+-----------+
| idT | startTime |
+-----+-----------+
|  10 | 13:00:00  |
|   9 | 12:30:00  |
|   8 | 12:30:00  |
|   7 | 11:50:00  |
|   6 | 11:30:00  |
|  11 | 13:00:00  |
+-----+-----------+

如果 ":val" 是 '13:00:00',则结果必须是 '4'。
如果 ":val" 是 '11:00:00',则结果必须是 '2'。
如果 ":val" 为 '13:35:00',则结果必须为 '0'。


我希望它让我明白了,我希望有一个不参考其他编程语言的解决方案...... 提前致谢!

【问题讨论】:

  • 如果 ":val" 是 '...',结果一定是 '...' 为什么?解释每一行。 一个显示“伪代码”的示例它没有描述用于计数的分组。
  • 产生所有计数的查询是什么。
  • @Akina 如果 ":val" 是 '13:00:00',结果必须是 '4'。这是因为从 12:25:00(不包括在内)到 13:10:00(包括在内)的时间段之间存在的“TICKET”的最大值实际上是“4”……我不知道不知道怎么用其他方式向你解释……
  • @Strawberry ` SELECT COUNT(idT) FROM TICKET WHERE startTimestartTime>(TIME(' :time')-间隔 35 分钟); ` 这会从 ":val" 生成一个 COUNT ...
  • 请通过编辑而非 cmets 进行澄清。这还不清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。

标签: mysql sql database count max


【解决方案1】:
SELECT SUM(startTime BETWEEN ADDTIME(@time, '-00:35:00') AND ADDTIME(@time, '00:10:00'))
FROM ticket;

fiddle

【讨论】:

  • 非常感谢!只有一个问题:他不应该像这样把时间加起来吗?简而言之,是不是可以给我解释一下代码?
  • @ZELA 他不应该像这样把时间加起来吗? ADDTIME() function. 您不是可以给我解释一下代码吗? 括号中的条件测试每个单独的行是否在 TRUe 时给出 1,在 FALSE 时给出 0SUM() - 总结了这些结果。
【解决方案2】:

请考虑以下情况,但请注意,这不考虑关系...

SELECT :val1
     , COUNT(*) total 
  FROM TICKET 
 WHERE startTime <= (TIME(':val')+INTERVAL 10 MINUTE) 
   AND startTime >  (TIME(':val')-INTERVAL 35 MINUTE)
 UNION
SELECT :val2
     , COUNT(*)  
  FROM TICKET 
 WHERE startTime <= (TIME(':val')+INTERVAL 10 MINUTE) 
   AND startTime >  (TIME(':val')-INTERVAL 35 MINUTE)
SELECT :val3
     , COUNT(*)  
  FROM TICKET 
 WHERE startTime <= (TIME(':val')+INTERVAL 10 MINUTE) 
   AND startTime >  (TIME(':val')-INTERVAL 35 MINUTE)
 ORDER  
    BY total DESC 
 LIMIT 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多