Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在单个查询中组合max和columns_Sql_Sqlite - Fatal编程技术网

Sql 在单个查询中组合max和columns

Sql 在单个查询中组合max和columns,sql,sqlite,Sql,Sqlite,我有两张桌子: 客户->内部ID,字符串名称 采购->日期,整数值,整数C\U ID 在客户表中,我有: 1, A 2, B 在“购买”表中: 01-01-2019, 10, 1 02-01-2019, 20, 2 03-01-2019, 30, 2 我想做一个查询,返回每个客户的最新购买信息。所以我想得到: 1, 01-01-2019 2, 03-01-2019 我尝试了不同的选择,但没有成功: select max(purchase.date), customer.id from c

我有两张桌子:

  • 客户->内部ID,字符串名称
  • 采购->日期,整数值,整数C\U ID
  • 在客户表中,我有:

    1, A
    2, B
    
    在“购买”表中:

    01-01-2019, 10, 1
    02-01-2019, 20, 2
    03-01-2019, 30, 2
    
    我想做一个查询,返回每个客户的最新购买信息。所以我想得到:

    1, 01-01-2019
    2, 03-01-2019
    
    我尝试了不同的选择,但没有成功:

    select max(purchase.date), customer.id 
    from customer, purchase 
    where purchase.c_id = customer.id
    
    但结果只是:

    2, 03-01-2019
    
    所以我不能得到每行的最大值


    可能吗?你能帮我吗?

    基本上,你的查询只需要一个
    GROUPBY
    子句。没有它,所有记录都聚合到一个唯一的行中,其中包含最长日期和随机选择的客户id

    如果只需要客户id和日期,则无需涉及客户表:

    select c_id, max(date) from purchase group by c_id
    
    如果您需要来自客户表的信息(如客户名称),则:

    注:

    • 始终使用首选的显式标准联接而不是老式的隐式联接
    • 使用表别名可以使查询更短、更易于阅读

    基本上,您的查询只需要一个
    GROUPBY
    子句。没有它,所有记录都聚合到一个唯一的行中,其中包含最长日期和随机选择的客户id

    如果只需要客户id和日期,则无需涉及客户表:

    select c_id, max(date) from purchase group by c_id
    
    如果您需要来自客户表的信息(如客户名称),则:

    注:

    • 始终使用首选的显式标准联接而不是老式的隐式联接
    • 使用表别名可以使查询更短、更易于阅读
    我建议过滤而不是聚合:

    我建议过滤而不是聚合:


    @马西莫萨瓦齐。作为OP,你可以接受任何你喜欢的答案。但你不接受这个答案有什么原因吗?@MassimoSavazzi。作为OP,你可以接受任何你喜欢的答案。但你不接受这个答案有什么原因吗?
    select p.*
    from purchases p
    where p.date = (select max(p2.date) from purchases p2 where p2.c_id = p.c_id);