标签:mysql sql greatest-n-per-group
假设我有以下MySQL表:
user_id date_of_application date_ended grade status
---------------------------------------------------------------
1 2011-01-01 2011-02-28 1.0 Ended
1 2011-02-02 2011-03-28 1.0 Ended
1 2011-03-03 2011-04-28 (1.5) Ended
2 2011-01-01 2011-02-20 2.0 Ended
2 2011-02-02 2011-03-11 2.5 Ended
2 2011-03-03 2011-04-28 (1.0) Ended
1 2011-05-10 - - Pending
2 2011-05-15 - - Pending
>请注意,只要所有先前的应用程序已结束(状态=已结束),该表就可以包含同一用户的多个记录
> user_id不是唯一的
>日期采用yy-mm-dd格式
> date_ended和grade仅在应用程序结束时更新
我想在这里完成的是检索所有行(一起将所有列)WHERE状态为“待定”,并且每个检索行的等级列的值是最新等级的值(在上面的括号中)此特定用户(或行)的状态为“已结束”.
结果:
user_id date_of_application date_ended grade status
---------------------------------------------------------------
1 2011-05-10 2011-06-10 1.5 Pending
2 2011-05-15 2011-06-15 1.0 Pending
– – 编辑 – – -:
我不确定我是否需要为这些添加创建另一个线程(‘如果我建议这样做的话会这样做),无论如何 – 我决定使用ypercube的答案(见下文)(哪个有效,减去评论)部分).但是,除了上面得到的表之外,我还想再选择两列(每个列来自不同的表):
提供所需表结果的工作代码(见上文):
SELECT user_id
, date_of_application
, date_ended
, ( SELECT te.grade
FROM TableX AS te
WHERE te.status = 'Ended'
AND te.user_id = t.user_id
ORDER BY te.date_ended DESC
LIMIT 1
) AS grade
, status
FROM TableX AS t
WHERE status = 'Pending'
现在我需要选择这两个其他列(is_first_time_user和name)以及前面提到的结果表.请注意,这两个表的user_id都是唯一的:
表2:
user_id is_firs_time_user
-----------------------------
1 no
2 no
表3:
user_id name
----------------------
1 User A
2 User B
解决方法:
SELECT user_d
, date_of_application
, date_ended
, ( SELECT te.grade
FROM TableX AS te
WHERE te.status = 'Ended'
AND te.user_id = t.user_id
AND te.date_ended < t.date_of_application --- not sure if
--- this is needed
ORDER BY te.date_ended DESC
LIMIT 1
) AS grade
, status
FROM TableX AS t
WHERE status = 'Pending'
标签:mysql,sql,greatest-n-per-group 来源: https://codeday.me/bug/20190610/1209406.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。