Home > Enterprise >  select second lowest date in table
select second lowest date in table

Time:12-25

I want to filter the second lowest date. I´m familiar with the min/max functions, but they are not applicable here.

DF<-tibble::tribble(
         ~date,
  "2019-01-01",
  "2019-01-02",
  "2019-01-03",
  "2019-01-04",
  "2019-01-05",
  "2019-01-06",
  "2019-01-07",
  "2019-01-08",
  "2019-01-09",
  "2019-01-10",
  "2019-01-11",
  "2019-01-12",
  "2019-01-13",
  "2019-01-14"
  )

DF$date<-as.Date(DF$date)

Desired output:

2009-01-02

Anyone? :)

CodePudding user response:

A little lateral thinking gives this solution using the tidyverse.

The logic is to sort the dates from lowest to highest (arrange), select the earliest two (head) and then take the latest of the two selected (max).

> DF %>% arrange(date) %>% head(2) %>% pull(date) %>% max()
[1] "2019-01-02"

CodePudding user response:

Using order in this way.

DF$date[order(as.Date(DF$date)) == 2]
# [1] "2019-01-02"

CodePudding user response:

 SELECT
 table2.ID,
 table2.DNUMBER,
 table1.DNUMBER,
 MAX(table1.FDATE) AS LATESTDATE,
 (
 SELECT MAX(table1.FDATE) 
 FROM table1 
 WHERE table2.DNUMBER = table1.DNUMBER 
 AND table1.FDATE < (
    SELECT MAX(table1.FDATE) 
    FROM table1 
    WHERE table2.DNUMBER = table1.DNUMBER
   )
   ) AS SECONDLATESTDATE
   FROM table2
   LEFT OUTER JOIN table1 ON table2.DNUMBER = table1.DNUMBER
   GROUP BY table2.DNUMBER

CodePudding user response:

You could use sort, head and tail like so.

library(tidyverse)

DF$date %>% sort() %>% head(2) %>% tail(1)

#[1] "2019-01-02"
  •  Tags:  
  • r
  • Related