簡體   English   中英

從數據庫中選擇最高值,客戶名稱是唯一的?

[英]Selecting the highest values from database, unique to customer name?

我有許多客戶的Microsoft SQL數據庫,列是CustomerID,CustomerName,Locations,SQFT,EditDate, DateRecorded

每天,我們都會記錄客戶使用的面積。 因此,數據庫應該具有該月每天的值。 我想為每位顧客選擇面積最高的日子。 以下代碼僅返回單個客戶,而不是所有客戶。 如何為每位客戶返回當月最高的SQFT?

我的代碼:

// $db_month_start = the first of the current month.
// $db_month_end = the end of the current month.
$query = "SELECT CustomerID,CustomerName,SQFT,EditDate 
          FROM SquareFootage 
          WHERE DateRecorded >= '{$db_month_start}' 
          AND DateRecorded <= '{$db_month_end}' 
          AND SQFT = (Select Max(SQFT) From SquareFootage WHERE DateRecorded >= '{$db_month_start}' AND DateRecorded <= '{$db_month_end}') ";

每位客戶每月最高SQFT:

select  CustomerID
,       CustomerName
,       convert(varchar(7), DateRecorded, 120) as [Month]
,       max(SQFT) as MaxSQFTThisMonth
from    SquareFootage
group by
        CustomerID
,       CustomerName
,       convert(varchar(7), DateRecorded, 120) 

這將適用於任意數月,並且具有多天最高SQFT的客戶僅列在一行中。

您可以按照相同的路徑進行操作。 你只需要一個相關的子查詢:

SELECT CustomerID, CustomerName, SQFT, EditDate 
FROM SquareFootage sf
WHERE DateRecorded >= '{$db_month_start}' AND DateRecorded <= '{$db_month_end}' AND
      SQFT = (Select Max(sf2.SQFT)
              From SquareFootage sf2
              WHERE sf2.DateRecorded >= '{$db_month_start}' AND
                    sf2.DateRecorded <= '{$db_month_end}' AND
                    sf2.CustomerId = sf.CustomerId
             );
with cte as (
   SELECT *, rank() over (partition by CustomerId order by SQFT desc) as [r]
   FROM SquareFootage 
   WHERE DateRecorded >= '{$db_month_start}' 
   AND DateRecorded <= '{$db_month_end}'
)
select CustomerID,CustomerName,SQFT,EditDate
from cte
where [r] = 1

此查詢顯示為“對於每個客戶,按SQFT按相反順序對記錄進行排名。然后,返回每個客戶的最高記錄”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM