zoukankan      html  css  js  c++  java
  • [SQL]1164 又是被主键坑了的一天

    1164. 指定日期的产品价格

    之前一直不知道主键是干啥的,读题就总选择性忽略了主键,然后今天这个题,给我上了生动的一课...

    思路很简单,关键是要选出每个产品2019-08-16之前最大日期,以及它对应的产品id及价格。大概就是创造一个这个样子的临时表。

    然后我写出了这样子的代码。

    SELECT product_id, MAX(change_date) AS date
    FROM Products 
    WHERE change_date <= '2019-08-16'
    GROUP BY product_id
    

    然后发现,我的临时表为什么总是这个样子。

    也就是说,他的价格和日期没有对应上!!

    看了别人的答案,我才发现主键的重要性。

    直到我的代码变成:

    SELECT product_id, new_price
    FROM Products
    WHERE (product_id, change_date) IN (SELECT product_id, MAX(change_date) AS date
                                        FROM Products 
                                        WHERE change_date <= '2019-08-16'
                                        GROUP BY product_id)
    

    他才乖乖听话给我对应上了。

    其实上上篇博客没有解决的问题,也是出在这里了。

    行了我知道主键不是写着好看的了。

    SELECT t1.product_id, IFNULL(new_price, 10) AS price
    FROM (SELECT DISTINCT product_id FROM Products) t1 LEFT JOIN
    (SELECT product_id, new_price
    FROM Products
    WHERE (product_id, change_date) IN (SELECT product_id, MAX(change_date) AS date
                                        FROM Products 
                                        WHERE change_date <= '2019-08-16'
                                        GROUP BY product_id) ) t2
    ON t1.product_id = t2.product_id;
    
  • 相关阅读:
    error C2440: 'initializing' : cannot convert from 'const char [11]' to 'ATL::CStringT<BaseType,Strin
    DB1:数据库的创建和文件的修改
    Django之Form表单
    Django内置的分页模块
    Cookie和Session
    AJAX使用说明书 基础
    JSON和Django内置序列化
    django之urls系统
    Django之views系统
    模板语言
  • 原文地址:https://www.cnblogs.com/wyz-2020/p/12713277.html
Copyright © 2011-2022 走看看