>

기존의 모든 레코드 (매달 여러 달의 마지막 날)에서 매월 마지막 날의 값만 가져 오는 쿼리가 있습니다. SUM () 절을 사용하여 마지막 날에만 필요한 값을 얻을 수 없습니다. 이것은 전체 달의 모든 값을 합산합니다. 마지막 날의 가치 만 다른 방법으로 얻을 수 있습니까? 내가 놓친 것이 있습니까?

지금까지의 코드 :

SELECT 
    ID, 
    [Customer Name], 
    Year([ValDate]) & IIf(Len(Month([ValDate]))>1,Month([ValDate]),"0" & Month([ValDate])) AS BalMonth, 
    Sum(Value) AS LastValue
FROM 
    Archive
GROUP BY 
    ID, 
    [Customer Name], 
    Year([ValDate]), 
    Month([ValDate])
ORDER BY 
    ID, 
    Year(ValDate) & Month(ValDate)

다른 코드 테스트 :

SELECT 
    ID, 
    [Customer Name], 
    YEAR([ValDate]) & MONTH([ValDate]) & MAX(DAY([BalDate])) AS LastDayofMonth
FROM 
    Archive
GROUP BY 
    ID , 
    [Customer Name], 
    YEAR([ValDate]), 
    MONTH([ValDate])
ORDER BY 
    ID, 
    [Customer Name], 
    YEAR([ValDate]), 
    MONTH([ValDate])

코드의 두 번째 섹션은 YYYYMMDD 에서 날짜를 생성하므로 작동하지 않았습니다.  체재. 이렇게하면 날짜를 올바르게 정렬 할 수 없습니다. 대신 날짜는 1, 10, 11, 12, 2, 3, 4 등으로 주문됩니다.

어떤 것이 확실하지 않은 경우 명확히하기 위해 최선을 다하겠습니다. 알려주세요!

  • 답변 # 1

    다음과 같이 해보십시오 :

    SELECT 
        ID, 
        [Customer Name], 
        [ValDate] AS LastDayofMonth,
        Sum([FieldToSum]) As Total
    FROM 
        Archive
    GROUP BY 
        ID, 
        [Customer Name],
        [ValDate]
    HAVING
        [ValDate] = DateSerial(Year([ValDate]), Month([ValDate]) + 1, 0)
    
    

    수정 :

    형식화 된날짜 출력을 가지려면 다음을 시도하십시오 :

    SELECT 
        ID, 
        [Customer Name], 
        Format([ValDate], "yyyymmdd") AS LastDayofMonth,
        Sum([FieldToSum]) As Total
    FROM 
        Archive
    WHERE
        [ValDate] = DateSerial(Year([ValDate]), Month([ValDate]) + 1, 0)
    GROUP BY 
        ID, 
        [Customer Name],
        Format([ValDate], "yyyymmdd")
    
    

  • 이전 java - Spring Boot 및 Spring Data Neo4j를 사용하는 REST API
  • 다음 java - Excel 파일을 S3 인 메모리로 스트리밍 하시겠습니까? ZipOutputStream의 ByteOutputStreamreset ()으로 인해 쓰기가 작동하지 않는 이유는 무엇입니까?