Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да получа разликата между индивидуалните максимални стойности за различните дни?

Актуализация 1:Ето една цигулка, http://sqlfiddle.com/#!2/818ad /2 , който използвах за тестване.
Актуализация 2:Ето една цигулка, http://sqlfiddle.com/#!2/3f78d/10 които използвах за по-нататъшно усъвършенстване/оправяне, въз основа на коментарите на Санди.
Актуализация 3:По някаква причина случаят, в който няма предходен ден, не беше разгледан правилно. Мислех, че е така. Въпреки това актуализирах, за да се уверя, че работи (малко тромаво - но изглежда е правилно. Последна цигулка:http://sqlfiddle.com/#!2/3f78d/45

Мисля, че @Grijesh концептуално ви даде основното нещо, от което се нуждаете чрез самостоятелното присъединяване на входните данни (така че не забравяйте да гласувате за неговия отговор!). Почистих малко заявката му по синтаксиса (надграждайки заявката му!):

SELECT
DATE(t1.`Production_date`) as theDate,
MAX( t1.`bundle_count` ) AS  'max(bundle_count)',
MAX( t1.`bundle_count` ) - 
    IF(
       EXISTS
           (
            SELECT date(t2.production_date)
            FROM input_example t2
            WHERE t2.machine_no = 1 AND 
                  date_sub(date(t1.production_date), interval 1 day) = date(t2.production_date)
        ),
        (
            SELECT MAX(t3.bundle_count)
            FROM input_example t3
            WHERE t3.machine_no = 1 AND 
                  date_sub(date(t1.production_date), interval 1 day) = date(t3.production_date)
            GROUP BY DATE(t3.production_date)
        ),          0
    )
    AS Total_Bundles_Used
FROM  `input_example` t1
WHERE t1.machine_no = 1
GROUP BY DATE( t1.`production_date` )      

Забележка 1:Мисля, че с @Grijesh изчистихме синтаксиса на заявките едновременно. Окуражаващо е, че се оказахме с много сходни версии, след като и двамата правихме почистване. Моята версия се различава в използването на IFNULL() за когато няма предходни данни. Аз също се оказах с DATE_SUB , и се погрижих да намаля различните дати до обикновени дати без компонент за време чрез DATE()

Забележка 2:Първоначално не бях разбрал напълно вашите изходни таблици, така че реших, че трябва да внедря текущ брой в заявката. Но при по-добра проверка става ясно, че изходните ви данни вече имат текущ брой, така че извадих тези неща обратно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Прегледайте всички таблици и преименувайте колона

  2. MySQL PHP - ИЗБЕРЕТЕ КЪДЕ id =array()?

  3. Най-добрият начин за съхраняване на времеви интервал в MySQL база данни?

  4. Повторно използване на стойността на израза на SQL SELECT за друг израз

  5. Как да накарам php кода да се свърже с две различни бази данни с два различни хоста?