Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8931257
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T09:04:35+00:00 2026-06-15T09:04:35+00:00

I’m stuck on this problem. Basically I need to find out for each department

  • 0

I’m stuck on this problem.

Basically I need to find out for each department how to figure out which days had the most sales made in them. The results display the department number and the date of the day and a department number can appear several times in the results if there were several days that have equally made the most sales.

This is what I have so far:

SELECT departmentNo, sDate FROM Department
HAVING MAX(sDate)
ORDER BY departmentNo, sDate;

I tried using the max function to find which dates occurred most. But it only returns one row of values. To clarify more, the dates that has the most sales should appear with the corresponding column called departmentNo. Also, if two dates for department A has equal amount of most sales then department A would appear twice with both dates showing too.

NOTE: only dates with the most sales should appear and the departmentNo.

I’ve started mySQL for few weeks now but still struggling to grasp the likes of subqueries and store functions. But i’ll learn from experiences. Thank you in advance.

UPDATED:

Results I should get:

DepartmentNo Column 1: 1 | Date Column 2: 15/08/2000 
DepartmentNo Column 1: 2 | Date Column 2: 01/10/2012 
DepartmentNo Column 1: 3 | Date Column 2: 01/06/1999 
DepartmentNo Column 1: 4 | Date Column 2: 08/03/2002 
DepartmentNo Column 1: nth | Date Column 2: nth date

These are the data:

INSERT INTO Department VALUES ('1','tv','2012-05-20','13:20:01','19:40:23','2');
INSERT INTO Department VALUES ('2','radio','2012-07-22','09:32:23','14:18:51','4');
INSERT INTO Department VALUES ('3','tv','2012-09-14','15:15:43','23:45:38','3');
INSERT INTO Department VALUES ('2','tv','2012-06-18','06:20:29','09:57:37','1');
INSERT INTO Department VALUES ('1','radio','2012-06-18','11:34:07','15:41:09','2');
INSERT INTO Department VALUES ('2','batteries','2012-06-18','16:20:01','23:40:23','3');
INSERT INTO Department VALUES ('2','remote','2012-06-18','13:20:41','19:40:23','4');
INSERT INTO Department VALUES ('1','computer','2012-06-18','13:20:54','19:40:23','4');
INSERT INTO Department VALUES ('2','dishwasher','2011-06-18','13:20:23','19:40:23','4');
INSERT INTO Department VALUES ('3','lawnmower','2011-06-18','13:20:57','20:40:23','4');
INSERT INTO Department VALUES ('3','lawnmower','2011-06-18','11:20:57','20:40:23','4');
INSERT INTO Department VALUES ('1','mobile','2012-05-18','13:20:31','19:40:23','4');
INSERT INTO Department VALUES ('1','mouse','2012-05-18','13:20:34','19:40:23','4');
INSERT INTO Department VALUES ('1','radio','2012-05-18','13:20:12','19:40:23','4');
INSERT INTO Department VALUES ('2','lawnmowerphones','2012-05-18','13:20:54','19:40:23','4');
INSERT INTO Department VALUES ('2','tv','2012-05-12','06:20:29','09:57:37','1');
INSERT INTO Department VALUES ('2','radio','2011-05-23','11:34:07','15:41:09','2');
INSERT INTO Department VALUES ('1','batteries','2011-05-21','16:20:01','23:40:23','3');
INSERT INTO Department VALUES ('2','remote','2011-05-01','13:20:41','19:40:23','4');
INSERT INTO Department VALUES ('3','mobile','2011-05-09','13:20:31','19:40:23','4');

For department1 the date 2012-05-18 would appear because that date occurred the most. And for every department, it should only show the one with the most sales, and if same amount of sales appears on the same date then both will appear, e.g. Department 1 will appear twice with both the dates of max sales.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T09:04:36+00:00Added an answer on June 15, 2026 at 9:04 am

    I’ve tested the following query based on the table and two columns you’ve provided along with sample data. So, let me describe it for you. The inner-most “PREQUERY” is doing a count by department and date. The results of this will be pre-ordered by Department first, THEN the highest count in DESCENDING ORDER (so highest sales count is listed FIRST), it doesn’t matter what date the count happened.

    Next, by utilizing MySQL @variables, I’m pre-declaring two to be used in the query. @variables are like inline programming with MySQL. They can be declared once and then changed as applied to each record being processed. So, I’m defaulting to a bogus department value and a zero sales count.

    Now, I’m grabbing the results of the PreQuery (Dept, #Sales and Date), but now, adding a test. If it is the FIRST ENTRY for a given department, use that record’s “NumberOfSales” and put into the @maxSales variable and store as a final column name “MaxSaleCnt”. The next column name uses the @lastDept and is set to whatever the current record’s Department # is. So it can be compared to the next record.

    If the next record is the same department, then it just keeps whatever the @maxSales value was from the previous, thus keeping the same first count(*) result for ALL entries on each respective department.

    Now, the closure. I’ve added a HAVING clause (not a WHERE as that restricts what records get tested, but HAVING processes AFTER the records are part of the PROCESSED set. So now, it would have all 5 columns. I am saying ONLY KEEP those records where the final NumberOfSales for the record MATCHES the MaxSaleCnt for the department. If one, two or more dates, no problem it returns them all per respective department.

    So, one department could have 5 dates with 10 sales each, and another department has 2 dates with only 3 sales each, and another with only 1 date with 6 sales.

    select
          Final.DepartmentNo,
          Final.NumberOfSales,
          Final.sDate
       from
          (select
              PreQuery.DepartmentNo,
              PreQuery.NumberOfSales,
              PreQuery.sDate,
              @maxSales := if( PreQuery.DepartmentNo = @lastDept, @maxSales, PreQuery.NumberOfSales ) MaxSaleCnt,
              @lastDept := PreQuery.DepartmentNo
           from
              ( select
                      D.DepartmentNo,
                      D.sDate,
                      count(*) as NumberOfSales
                   from
                      Department D
                   group by
                      D.DepartmentNo,
                      D.sDate
                   order by
                      D.DepartmentNo,
                      NumberOfSales DESC ) PreQuery,
              ( select @lastDept := '~',
                       @maxSales := 0 ) sqlvars
           having
              NumberOfSales = MaxSaleCnt ) Final
    

    To clarify the “@” and “~” per you final comment. The “@” indicates a local variable to the program (or in this case and in-line sql variable) that can be used in the query. The ‘~’ is nothing more than a simple string that probability would never exist that of any of your departments, so when it is compared to the first qualified record, does an IF( ‘~’ = YourFirstDepartmentNumber, then use this answer, otherwise use this answer).

    Now, how do the above work. Lets say the following is the results of your data returned by the inner-most query, grouped and ordered by the most sales at the top going down… SLIGHTLY altered from your data, lets just assume the following to simulate multiple dates on Dept 2 that have the same sales quantity…

    Row#   DeptNo  Sales Date     # Sales
    1      1       2012-05-18        3
    2      1       2012-06-18        2
    3      1       2012-05-20        1
    
    4      2       2012-06-18        4
    5      2       2011-05-23        4
    6      2       2012-05-18        2
    7      2       2012-05-12        1
    
    8      3       2011-06-18        2
    9      3       2012-09-14        1
    

    Keep track of the actual rows. The innermost query that finishes as alias “PreQuery” returns all the rows in the order you see here. Then, that is joined (implied) with the declarations of the @ sqlvariables (special to MySQL, other sql engines dont do this) and starts their values with the lastDept = ‘~’ and the maxSales = 0 (via assignment with @someVariable := result of this side ).
    Now, think of the above being handled as a

    DO WHILE WE HAVE RECORDS LEFT
       Get the department #, Number of Sales and sDate from the record.
    
       IF the PreQuery Record's Department # = whatever is in the @lastDept
          set MaxSales = whatever is ALREADY established as max sales for this dept
          This basically keeps the MaxSales the same value for ALL in the same Dept #
       ELSE
          set MaxSales = the # of sales since this is a new department number and is the highest count
       END IF
    
       NOW, set @lastDept = the department you just processed to it 
       can be compared when you get to the next record.
    
       Skip to the next record to be processed and go back to the start of this loop
    END DO WHILE LOOP
    

    Now, the reason you need to have the @MaxSales and THEN the @LastDept as returned columns is they must be computed for each record to be used to compare to the NEXT record. This technique can be used for MANY application purposes. If you click on my name, look at my tags and click on the MySQL tag, it will show you the many MySQL answers I’ve responded to. Many of them do utilize @ sqlvariables. In addition, there are many other people who are very good at working queries, so dont just look in one place. As for any question, if you find a good answer that you find helpful, even if you didn’t post the question, clicking on an up-arrow next to the answer helps others indicate what really helped them understand and get resolution to questions — again, even if its not your question. Good luck on your MySQL growth.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a string like this: La Torre Eiffel paragonata all’Everest What PHP function
I'm parsing an RSS feed that has an ’ in it. SimpleXML turns this
I know there's a lot of other questions out there that deal with this
I'm trying to decode HTML entries from here NYTimes.com and I cannot figure out
I am trying to understand how to use SyndicationItem to display feed which is
I used javascript for loading a picture on my website depending on which small
link Im having trouble converting the html entites into html characters, (&# 8217;) i
For some reason, after submitting a string like this Jack’s Spindle from a text
Seemingly simple, but I cannot find anything relevant on the web. What is the
this is what i have right now Drawing an RSS feed into the php,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.