php - 如何根据输出编写mysql查询?

标签 php mysql codeigniter

我的表格应该是这样的:

slno      sheetno   time_stamp
1         101       2018-05-27 11:16:58 
2         103       2018-05-27 11:20:18 
3         102       2018-05-27 11:24:39 
4         105       2018-05-27 11:27:44 
5         106       2018-05-27 11:34:03 
6         107       2018-05-27 11:51:32 
7         108       2018-05-27 12:41:34 
8         109       2018-05-27 12:48:13 
9         110       2018-05-27 12:52:40 
10        111       2018-05-27 13:18:59 
11        112       2018-05-27 14:13:07 
12        113       2018-05-27 14:18:04 
13        114       2018-05-27 14:21:12 
14        115       2018-05-27 14:54:01 
15        117       2018-05-27 14:55:14 
16        118       2018-05-27 14:57:31 
17        119       2018-05-27 15:05:30 
18        120       2018-05-27 15:30:44 
19        121       2018-05-27 15:46:38 
20        122       2018-05-27 16:02:16 
21        123       2018-05-28 11:32:10 
22        124       2018-05-28 11:38:18 
23        125       2018-05-28 11:49:45 
24        126       2018-05-28 11:52:09 
25        127       2018-05-28 12:21:00 
26        128       2018-05-28 12:24:33 
27        129       2018-05-28 13:04:56 
28        130       2018-05-28 14:10:07 
29        140       2018-05-28 14:18:47 
30        141       2018-05-28 14:22:09 
31        142       2018-05-28 14:28:04 
32        143       2018-05-28 14:37:53 
33        144       2018-05-28 15:06:27 
34        145       2018-05-28 15:33:05 
35        146       2018-05-28 15:35:44 
36        147       2018-05-28 15:53:41 
37        148       2018-05-28 16:13:16 
38        149       2018-05-28 16:27:51 
39        150       2018-05-28 16:38:54 
40        151       2018-05-28 16:44:54

我的输出应该是这样的:

From           To            Total No of days   FN   AN
27-05-2018     28-05-2018    2                  2    2

这是我的查询:

SELECT
    DATE_FORMAT(MIN(time_stamp), '%Y-%m-%d') AS min,
    DATE_FORMAT(MAX(time_stamp), '%Y-%m-%d') AS max,
    COUNT(DISTINCT DATE(time_stamp)) AS cnt,
    COUNT(CASE WHEN  TIME(time_stamp) < '12:00:00' THEN 1 END) AS FN,
    COUNT(CASE WHEN TIME(time_stamp) >= '12:00:00' THEN 1 END) AS AN 
FROM master_tab;

“FN”、“AN”的输出应该进行分组。怎么解决这个问题呢? 我尝试将 DISTINCT 放在它显示 i 值的情况前面。

最佳答案

您似乎走在正确的道路上:

SELECT
    DATE_FORMAT(MIN(time_stamp), '%Y-%m-%d') AS min,
    DATE_FORMAT(MAX(time_stamp), '%Y-%m-%d') AS max,
    COUNT(DISTINCT DATE(time_stamp)) AS cnt,
    COUNT(CASE WHEN TIME(time_stamp) < '12:00:00' THEN 1 END) AS FN,
    COUNT(CASE WHEN TIME(time_stamp) >= '12:00:00' THEN 1 END) AS VA
FROM master_tab;

enter image description here

Demo

注释:

  • 要选择最小/最大日期,进行额外的日期转换是没有意义的,因为 DATE_FORMAT 已将这些值仅作为日期。
  • 对于不同日期计数也是如此;请注意,DISTINCT 不是 MySQL 中的函数,而是关键字
  • FN(早上)和VA(晚上)的条件计数,当有匹配时计数为 1,并且计数 NULL 否则。请注意,COUNT 会忽略 NULL,因此我们只计算匹配的记录。省略的 ELSE 条件默认为 NULL

关于php - 如何根据输出编写mysql查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52620021/

相关文章:

mysql - 尝试将数据从同一表sql中的一列复制到另一列时出错

php - 使用bootstrap作为第一个事件项目的视频轮播,怎么办?

c# - 从二进制数据检索图像到图像字段

php - 返回 false 的回调函数 CodeIgniter

php - 为什么要测试 session 是否已启动

php - PDO rowCount 未返回正确的受影响行数

Codeigniter:获取记录和总和

php - 在我的示例中是否有一个简短而有趣的函数 toString 单个 jSON 对象或类似对象?

php - 在 MYSQL 中插入数据之前删除多余的字符?

php - 如何解决这个PHP算法?