Postgresql 无法解释的结果 - 使用 timestamptz::date
Postgresql Unexplained Results - Using timestamptz::date
请参阅 POST 结尾以获取更新。
参考下面的 table,我想编写一个查询:
1 - 排除 bool 设置为 false 的所有行
2 - 将时间(这是一个 timestamptz)转换为日期(我们称之为 'D')
3 - 按两列分组(组和 D)并计算行数
group, time, bool
grp-A, 2020-08-28 13:23:00.000000 +00:00, true
grp-A, 2020-08-28 10:19:00.000000 +00:00, false
grp-A, 2020-08-28 09:23:00.000000 +00:00, true
grp-B, 2020-08-28 13:51:00.000000 +00:00, true
grp-B, 2020-08-27 22:35:00.000000 +00:00, true
grp-B, 2020-08-27 15:10:00.000000 +00:00, true
grp-B, 2020-08-27 22:06:00.000000 +00:00, false
grp-A, 2020-08-27 13:03:00.000000 +00:00, true
答案应该是:
group, time, count(*)
grp-A, 2020-08-28, 2
grp-B, 2020-08-28, 1
grp-A, 2020-08-27, 1
grp-B, 2020-08-27, 2
我尝试使用的查询如下:
select group, time::date D, count(*)
from table
where bool = True
group by group,D;
但是它returns的结果是错误的。计数不正确,它似乎得到 random/lower 个数字。
有什么我在这方面出错的想法吗?提前致谢!
重要!编辑:我已将此问题隔离到查询的 time::date
部分。我写了一个新查询:
select time::date
from table
当我执行它时,它 returns 一个日期列表,但不是所有日期 - 只有一些!有谁知道为什么会这样?
你可以试试下面的-
select grpval, cast(time as date), count(*)
from tablename
where boolval = true
group by grpval, cast(time as date)
请参阅 POST 结尾以获取更新。
参考下面的 table,我想编写一个查询:
1 - 排除 bool 设置为 false 的所有行
2 - 将时间(这是一个 timestamptz)转换为日期(我们称之为 'D')
3 - 按两列分组(组和 D)并计算行数
group, time, bool
grp-A, 2020-08-28 13:23:00.000000 +00:00, true
grp-A, 2020-08-28 10:19:00.000000 +00:00, false
grp-A, 2020-08-28 09:23:00.000000 +00:00, true
grp-B, 2020-08-28 13:51:00.000000 +00:00, true
grp-B, 2020-08-27 22:35:00.000000 +00:00, true
grp-B, 2020-08-27 15:10:00.000000 +00:00, true
grp-B, 2020-08-27 22:06:00.000000 +00:00, false
grp-A, 2020-08-27 13:03:00.000000 +00:00, true
答案应该是:
group, time, count(*)
grp-A, 2020-08-28, 2
grp-B, 2020-08-28, 1
grp-A, 2020-08-27, 1
grp-B, 2020-08-27, 2
我尝试使用的查询如下:
select group, time::date D, count(*)
from table
where bool = True
group by group,D;
但是它returns的结果是错误的。计数不正确,它似乎得到 random/lower 个数字。
有什么我在这方面出错的想法吗?提前致谢!
重要!编辑:我已将此问题隔离到查询的 time::date
部分。我写了一个新查询:
select time::date
from table
当我执行它时,它 returns 一个日期列表,但不是所有日期 - 只有一些!有谁知道为什么会这样?
你可以试试下面的-
select grpval, cast(time as date), count(*)
from tablename
where boolval = true
group by grpval, cast(time as date)