[英]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.