【问题标题】:How to show only the records from the current如何只显示当前的记录
【发布时间】:2017-09-18 06:27:06
【问题描述】:

我只想选择当天的记录。所以我可以每天看到有多少访客(“bezoekers”)。

这是我使用的代码:

Select FROM_UnixTime((sensordata1.time), '%Y-%c-%d-%H') "Datum (Descending)", 
COUNT(DISTINCT address) "Bezoekers"  
FROM sensordata1  
ORDER BY 1
FROM_UnixTime((sensordata1.time), '%Y-%c-%d-%H') DESC

我尝试了什么:

Select FROM_UnixTime((sensordata1.time), '%Y-%c-%d-%H') "Datum (Descending)",
COUNT(DISTINCT address) "Bezoekers"  
FROM sensordata1  
WHERE 1, DATE('Datum') = DATE(CURDATE() 
ORDER BY 1
FROM_UnixTime((sensordata1.time), '%Y-%c-%d-%H') DESC

我想要什么:

Datum         | Bezoekers
2017-4-20-15  | 31
2017-4-20-14  | 34
2017-4-20-13  | 20
2017-4-20-12  | 26

而且我不想要例如 2017-04-21 在那里。 如果我第二天回来,它必须从那天开始,所以你不能设置日期。

【问题讨论】:

  • 添加一些示例表数据,以及它的预期结果。
  • 我已经展示了我想要的东西?这是预期的结果?
  • WHERE 子句对我来说似乎是错误的...您是否尝试过使用 HAVING...
  • WHERE 1, ... 在语法上是错误的(逗号应该是什么意思?)。 WHERE DATE('Datum') = DATE(CURDATE() 在语法上也是错误的(缺少右括号)。此外,您使用字符串'Datum'(单引号用于字符串文字)并尝试将此字符串转换为日期。顺便说一句:ORDER BY 1 FROM_UnixTime... 在语法上也是错误的(删除一个表达式或用逗号分隔两个表达式)。
  • 没有任何匹配的样本表数据的预期结果没有好处......

标签: mysql sql time timestamp where-clause


【解决方案1】:

您缺少GROUP BY。如果您希望每个 FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H') 有一个结果行,请按它进行分组。

Select
  FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H') AS "Datum (Descending)", 
  COUNT(DISTINCT address) AS "Bezoekers"  
FROM sensordata1  
GROUP BY FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H')
ORDER BY FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H') DESC;

仅当天相同(根据WHERE 子句添加):

Select
  FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H') AS "Datum (Descending)", 
  COUNT(DISTINCT address) AS "Bezoekers"  
FROM sensordata1  
WHERE FROM_UnixTime(sensordata1.time, '%Y-%m-%d') = curdate()
GROUP BY FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H')
ORDER BY FROM_UnixTime(sensordata1.time, '%Y-%c-%d-%H') DESC;

【讨论】:

  • 你到底是什么意思?如果我添加: GROUP BY FROM_UnixTime((sensordata1.time + 7200), '%Y-%c-%d-%H') 它仍然显示其他日子的数据然后这一天
  • 您的查询显示一个结果行,其中包含总计数和任意选择的日期/小时之一。但是您想要的结果每天/小时各有一行。这就是我的查询所做的。但是好吧,所以“我想要的”不是你想要的。
  • @Thorsten 也许他想在“基准”上添加 HAVING 子句(与 Currentdate 相比是降序的?
  • 啊,不,对不起,我看错了。仅当日,但每小时一排。我已经更新了我的答案。
  • 谢谢,这正是我所需要的!如果我也希望它与本月的天数有关,还有一个问题?所以我只想显示当月这些天的访问者天数和人数?
【解决方案2】:

我想指出,您可以使用别名来简化查询。日期逻辑有点不清楚,但您似乎想要昨天的日期。您可以使用 where 子句来执行此操作:

Select from_unixtime(sd.time, '%Y-%c-%d-%H') as Datum, 
       count(distinct sd.address) as Bezoekers 
from sensordata1 sd
where sd.time >= unixtime_timestamp(curdate() - interval 1 day) and
      sd.time < unixtime_timestamp(curdate())
group by datum
order by datum desc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多