【发布时间】:2018-07-17 13:19:10
【问题描述】:
我有 2 个表要加入并检索一些特定数据。这些是我的桌子。
tbl_user (reg_id, l_name, f_name, status)
tbl_payments (pay_id, reg_id, mem_plan, from_date, to_date, bill_no, payed_date)
我需要做的是选择并查看到期付款的用户。为此,我想从tbl_user 获取"status=0" 的用户详细信息,并将两个表连接在一起,条件为to_date< current date,[current date and the to_date] < 31 之间的差异@ 并按to_date 的最大值过滤。
到目前为止,我所做的根据上述条件给了我一个结果,但它没有按MAX(to_date) 过滤。这是我的查询。
SELECT
A.reg_id,
A.f_name,
A.l_name,
B.mem_plan,
B.from_date,
Max(B.to_date) AS to_date,
B.bill_no,
B.payed_date
FROM
tbl_user A,
tbl_payments B
WHERE
A.status = 0
AND A.reg_id = B.reg_id
AND Date(Now()) >= Date(B.to_date)
AND Datediff(Date(Now()), Date(b.to_date)) < 31
GROUP BY
a.reg_id, b.mem_plan, b.from_date, b.bill_no, b.payed_date;
我对MYSQL不是很熟悉,所以请有人告诉我我做错了什么或者这个查询是否不符合标准。
这里有一些示例数据可供处理。
tbl_user ( [M1111,Jon, Doe,0], [M1112,Jane,Doe,1],[M1113,Jony,Doe,0] )
tbl_payment ( [1,M1111,Monthly,2018-05-14,2018-06-14,b123,2018-05-14],[2,M1112,3Months,2018-02-03,2018-05- 03,b112,2018-02-03],[3,M1113,月刊,2018-06-14,2018-07-14,b158,2018-06-14],[4,M1111,月刊,2018-06- 15,2018-07-15,b345,2018-06-15],[5,M1113,月刊,2018-06-06,2018-07-06,b158,2018-06-06],[6,M1111,每月,2018-07-05,2018-08-05,b345,2018-07-05])
假设当前日期是 2018-07-17,预期结果应该是这样
[M1111,Jon,Doe,月刊,2018-06-15,2018-07-15,b345,2018-06-15],[M1113,Jon,Doe,月刊,2018-06-14,2018- 07-14,b158,2018-06-14]
而不是那个,我的查询给了我这个。
[M1111,Jon,Doe,月刊,2018-06-15,2018-07-15,b345,2018-06-15],[M1113,Jon,Doe,月刊,2018-06-06,2018- 07-06,b158,2018-06-06], [M1113,Jony,Doe,月刊,2018-06-14,2018-07-14,b158,2018-06-14]
【问题讨论】:
-
您的表中没有 reg_to。是 reg_to 还是 to_date?
-
确保按所有非聚合列分组,然后查看
GROUP BY ... HAVING to_date = max(to_date) -
您能提供一些示例数据并期待结果吗?
-
是的@GCadogan,reg_to 应该是 date_to。我已经纠正了我在这个问题上的错误。谢谢你..
-
@D-Shih 我添加了一些示例数据来处理。
标签: mysql sql database select max