以前,我将年龄存储为使用数据库中的 SQL 查询根据客户 DOB 计算得出的整数。然而,在意识到这是不好的做法之后,我尝试生成一个查询,根据用户出生日期计算年龄,并选择每个年龄组每月的订单数。但年龄并不是作为值存储在数据库中,而是计算出来的
我有一个查询,它就是这样做的,但假设年龄已经是数据库中计算的值,因此利用它:
#Query1
select COUNT(orderid) as OrderCount,
DATE_FORMAT(orderDate, "%m-%Y") as month
FROM customerOrders
INNER JOIN customerDetails ON
customerDetails.customerid=customerOrders.customerid
WHERE customerDetails.age BETWEEN 17 AND 24
group by month
order by strftime("%Y", orderDate)
我有一个从客户数据库计算年龄的查询: #查询2
SELECT YEAR(CURDATE()) - DOB - 1
FROM customerDetails
伪代码实现:
select COUNT(orderid) as OrderCount,
DATE_FORMAT(orderDate, "%m-%Y") as month,
age = (SELECT YEAR(CURDATE()) - DOB - 1 as age
FROM customerOrders, customerDetails
INNER JOIN customerDetails ON
customerDetails.customerid=customerOrders.customerid
WHERE
age BETWEEN 17 AND 24
FROM customerDetails
group by month
order by strftime("%Y", orderDate
最佳答案
如果您想更新年龄,只需使用 update
和 timestampdiff()
怎么样:
update customerDetails
set age = timestampdiff(dob, curdate());
也就是说,将年龄存储在表中是一个非常糟糕的主意。它实际上每天都在变化。
关于mysql - 两个查询的 SQL 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59878250/