首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取每个不同客户ID中的最后一列

获取每个不同客户ID中的最后一列
EN

Stack Overflow用户
提问于 2015-11-14 09:55:43
回答 2查看 49关注 0票数 1

我有一个包含发票日期和客户ID的表(当然还有其他数据)。我希望在每个客户的表中显示未来最长的发票日期。

我当前在以下位置使用此MySQL:

代码语言:javascript
复制
WHERE o70vm_invoices_invoices.invoice_date = (SELECT MAX(o70vm_invoices_invoices.invoice_date) FROM o70vm_invoices_invoices)";

此代码当前在列中仅显示一个客户的最旧日期。

我在下面包含了我的整个MySQL查询,请记住,我必须从不同的表中提取数据来显示我需要的数据。

代码语言:javascript
复制
$query = "SELECT       
    o70vm_invoices_contacts.name AS 'Parent_Name',
    o70vm_invoices_contacts.id AS 'Parent_ID',
    o70vm_invoices_contacts.company AS 'Children',
    o70vm_invoices_contacts.active AS 'Active',

    o70vm_invoices_invoices.id AS 'Invoice_ID',
    o70vm_invoices_invoices.user_id AS 'Parent_ID_on_Invoice',
    o70vm_invoices_invoices.invoice_num AS 'Invoice_Num',
    o70vm_invoices_invoices.invoice_date AS 'Invoice_Date',
    o70vm_invoices_invoices.invoice_duedate AS 'Invoice_Date_Due',

    o70vm_invoices_payments.invoice_id,
    o70vm_invoices_payments.id,
    o70vm_invoices_payments.payment_amount AS 'Payment_Amount',
    o70vm_invoices_payments.payment_datetime AS 'Payment_Date',
    o70vm_invoices_payments.payment_duedate,
    o70vm_invoices_payments.payment_status AS 'Payment_Status',
    o70vm_invoices_payments.payment_description AS 'Payment_Descript',
    o70vm_invoices_payments.payment_type AS 'Payment_Type'

    FROM o70vm_invoices_invoices, o70vm_invoices_contacts, o70vm_invoices_payments
    WHERE
    o70vm_invoices_contacts.id = o70vm_invoices_invoices.user_id
    AND
    o70vm_invoices_payments.invoice_id = o70vm_invoices_invoices.id
    AND
    o70vm_invoices_invoices.invoice_date < '2099-01-01'
    AND
    o70vm_invoices_contacts.active = 1
    AND o70vm_invoices_invoices.invoice_date = (SELECT MAX(o70vm_invoices_invoices.invoice_date) FROM o70vm_invoices_invoices)";

如果我使用GROUP BY:

代码语言:javascript
复制
GROUP BY o70vm_invoices_contacts.id

我可以拉出每个客户来显示,但它不会在表中显示最后一张将来的发票。

根据Stefan的评论,下面是我修改后的子查询:

代码语言:javascript
复制
$query = "SELECT   *
FROM   ( SELECT 
    o70vm_invoices_contacts.name AS 'Parent_Name',
    o70vm_invoices_contacts.id AS 'Parent_ID',
    o70vm_invoices_contacts.company AS 'Children',
    o70vm_invoices_contacts.active AS 'Active',

    o70vm_invoices_invoices.id AS 'Invoice_ID2',
    o70vm_invoices_invoices.user_id AS 'Parent_ID_on_Invoice',
    o70vm_invoices_invoices.invoice_num AS 'Invoice_Num',
    o70vm_invoices_invoices.invoice_date AS 'Invoice_Date',
    o70vm_invoices_invoices.invoice_duedate AS 'Invoice_Date_Due',

    o70vm_invoices_payments.invoice_id,
    o70vm_invoices_payments.id,
    o70vm_invoices_payments.payment_amount AS 'Payment_Amount',
    o70vm_invoices_payments.payment_datetime AS 'Payment_Date',
    o70vm_invoices_payments.payment_duedate,
    o70vm_invoices_payments.payment_status AS 'Payment_Status',
    o70vm_invoices_payments.payment_description AS 'Payment_Descript',
    o70vm_invoices_payments.payment_type AS 'Payment_Type'

    FROM o70vm_invoices_invoices, o70vm_invoices_contacts, o70vm_invoices_payments
    WHERE
    o70vm_invoices_contacts.id = o70vm_invoices_invoices.user_id
    AND
    o70vm_invoices_payments.invoice_id = o70vm_invoices_invoices.id
    AND
    o70vm_invoices_invoices.invoice_date < '2099-01-01'
    AND
    o70vm_invoices_contacts.active = 1
    ORDER BY o70vm_invoices_invoices.invoice_date DESC

    ) AS tmp
    GROUP BY tmp.id";

此查询列出第一个发票日期,而不是最后一个发票日期。如果我将订单更改为ASC,它只会对第一个发票日期的结果进行排序。

如果能帮上忙,非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2015-11-14 10:59:14

最好的方法可能是使用子查询:

代码语言:javascript
复制
SELECT * 
FROM (
    SELECT * 
    FROM o70vm_invoices_invoices 
    ORDER BY invoice_date DESC
) AS tmp
GROUP BY tmp.id
票数 1
EN

Stack Overflow用户

发布于 2015-11-14 12:28:26

我相信有一种更好的方法可以做到这一点;然而,这是可行的。

我刚刚在我的查询中添加了MAX:

代码语言:javascript
复制
max(o70vm_invoices_invoices.invoice_date) AS 'Invoice_Date',

这将列出每个客户的最远日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33704329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档