我在我的cassandra数据库中有这些数据:
+----+----------+-----+-----------+---------+----------+
| ID | NAME | hour_date | value |
+----+----------+-----+-----------+---------+----------+
| 1 | Ramesh | 2017-04-16 05:00:00+0000 | 2000.00 |
| 2 | Ramesh | 2017-04-16 08:00:00+0000 | 1500.00 |
| 3 | Ramesh | 2017-04-16 11:00:00+0000 | 2000.00 |
| 4 | Komal | 2017-04-22 05:00:00+0000 | 6500.00 |
| 5 | Komal | 2017-04-16 09:00:00+0000 | 8500.00 |
| 6 | Komal | 2017-04-22 17:00:00+0000 | 4500.00 |
| 7 | Komal | 2017-04-22 05:00:00+0000 | 10000.00 |
+----+----------+-----+-----------+---------+----------+
通过使用SQL查询,我可以计算每个名称在特定日期的值。以下是输出的示例:
输出:
Ramesh:
2017-04-16 : 3 values
Komal:
2017-04-16 : 1 value
2017-04-22 : 3 values
我试过这样做:
SELECT hour_date,name,count(value)
FROM table WHERE
(
SELECT hour_date from table
WHERE hour_date = '2017-04-16 05:00:00+0000'
)
但这不起作用。 如何查询表以给出每个名称和每小时_date我有多少值? 我无法解决这个问题。
我使用pyspark使用cassandra连接器进行sql查询。 任何建议都将非常感激。
答案 0 :(得分:2)
您可以使用以下查询
SELECT trunc(hour_date),name,count(value)
FROM table group by trunc(hour_date), name;
Trunc函数绕过时间戳,您可以获取与名称相关的特定日期的数据计数。您希望您也可以按日期和名称订购
order by trunc(hour_date), name
答案 1 :(得分:1)
您错过了分组功能计数的分组。 试试这个: -
SELECT name,hour_date,count(value) as values
FROM table
group by name, hour_date
order by name, hour_date
答案 2 :(得分:1)
我认为你可以使用(在MYSQL中):
SELECT name,DATE(hour_date) AS date_only, count(value) as values
FROM table
group by name, DATE(hour_date)
order by name, DATE(hour_date)
答案 3 :(得分:1)
您需要按照您想要指望的值进行分组,在您的情况下是用户和日期时间的日期部分
select name, toDate(hour_date), count(distinct id)
from table
group by name, toDate(hour_date)
order by name, toDate(hour_date)
toDate()
功能仅保留日期部分,不包括小时,分钟和秒。
另请注意,count参数为distinct id
,因为您的版本将计算两行,其值与一行相同。