sql - 为什么在 peroid 日期中使用 date_part 和确切的日期参数查询数据之间的结果不同?
问题描述
我正在尝试计算表中某些列中的不同值。我有一个逻辑,我尝试用 2 种方式编写但是我从这两个查询中得到了不同的结果。有人可以帮我澄清一下吗?我不知道代码有什么问题,或者我认为。
SQL
select count(distinct membership_id) from members_membership m
where date_part(year,m.membership_expires)>=2019
and date_part(month,m.membership_expires)>=7
and date_part(day,m.membership_expires)>=1
and date_part(year,m.membership_creationdate)<=2019
and date_part(month,m.membership_creationdate)<=7
and date_part(day,m.membership_creationdate)<=1
;
select count(distinct membership_id) from members_membership m
where m.membership_expires>='2019-07-01'
and m.membership_creationdate<='2019-07-01'
;
解决方案
我实际上认为这是您打算运行的查询:
SELECT
COUNT(DISTINCT membership_id)
FROM members_membership m
WHERE
m.membership_expires >= '2019-07-01' AND
m.membership_creationdate < '2019-07-01';
会员资格在创建的同时到期是没有意义的,因此如果它在 2019 年 7 月 1 日午夜到期,那么它应该严格在该时间点之前创建。
话虽如此,第一个查询的问题在于,例如,对于月份在 7 月或之前的限制将适用于每年,而不仅仅是 2019 年。很难使用年、月和天条款分开。因此,您使用的第二个版本更可取。它也是可搜索的,这意味着可以使用membership_expires
或使用索引。membership_creationdate
推荐阅读
- reactjs - 如何将 useState 数据传递给另一个 .tsx 文件?
- vue.js - 如何在 vee-validate 中使用 vue3 输入组件?
- angular - 阻止 Angular 12 用
- sql - 我可以在TDengine中以restful风格执行多个SQL语句吗?
- python - 无法使用 pandas.read_html() 将多个表中的内容添加到 csv 文件
- reactjs - React 路由器渲染多个组件
- intellij-idea - 如何自动将实现的方法返回值与类中已经存在的实例变量匹配?
- python - Fillna 在除最后一行之外的所有行上
- sql - 如果数据库表中不存在某些东西,如何以表格形式返回它。可能吗?
- javascript - 更新 html 按钮后 AddEVentListener 不起作用