gpt4 book ai didi

sql - 根据加入日期和离开日期选择用户

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:02 26 4
gpt4 key购买 nike

我有下表:

UserID Name Date_Joined Date_Left 
1 Test 2018-08-10 NULL
2 Test2 2018-07-10 NULL
3 Test3 2018-07-10 2018-12-31
4 Test4 2018-08-10 2018-09-10

我只想根据他们的加入和/或离开日期来检查他们是否可以计费(=事件)。

这些是收费用户:

  1. 开始月份至少比账单日期早一个月的用户 没有剩余日期

  2. 开始月份至少比账单日期早一个月的用户 剩余日期等于账单日期或晚于 账单日期

计费月份 = 总是上个月。

我使用以下查询:

DECLARE @billdate AS DATE = '2018-09-01';
SELECT *
FROM person
WHERE CompanyID = 1205 AND (
(
date_joined <= EOMONTH(@billdate, -1)
)
OR
(
date_left > EOMONTH(@billdate, -1) AND
date_left <= EOMONTH(@billdate)
)
)

我的问题:

  • 如果我将 billdate 设置为 2018-11-01,用户 Test4 仍然存在于我的表中。
  • 如果我将 billdate 设置为 2019-01-01,用户 Test3 会消失

我的查询有什么问题,我该如何优化它?

示例数据:

用户列表:

1 - 测试 - 2018-08-10 - 空

2 - 测试 2 - 2018-07-10 - 空

3 - 测试 3 - 2018-07-10 - 2018-12-31

4 - 测试 4 - 2018-08-10 - 2018-09-10

对于上个月(= 8/8 月)= @billdate 2018-09-10 的计费周期,这些是计费用户:

测试2测试3

但是,当我将账单周期更改为 10/10 月时,这些是计费用户:

测试测试2测试3

最佳答案

如果我没有正确理解您的逻辑,可计费用户是指起始月份至少比当前月份早一个月且结束月份小于或等于当前月份的用户。

SELECT *,
CASE WHEN @billdate >= DATEADD(d, 1, EOMONTH(date_joined)) AND
(@billdate <= DATEADD(d, 1, EOMONTH(date_left)) OR date_left IS NULL)
THEN 'billable'
ELSE 'not billable' END AS status
FROM person;

这种计费逻辑似乎与客户第一个月免费,但从第二个月到最后一个月计费一致。

Demo

关于sql - 根据加入日期和离开日期选择用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com