SQL One Liners

From bibbleWiki
Jump to navigation Jump to search

Snowflake

List row count for views in a schema

This creates a command you subsequently execute

select listagg(xx, ' union all ')
from (
    select 'select count(*) c, \'' || x || '\' v from ' || x as xx
    from (
        select TABLE_CATALOG ||'.'|| TABLE_SCHEMA ||'."'||TABLE_NAME||'"' x
        from IHC.INFORMATION_SCHEMA.VIEWS
        where table_schema='APPROVALPLUS'
    )
);

Convert date from known format

select to_date('3/4/2013', 'dd/mm/yyyy');

MS SQL

List row count for tables in a schema

SELECT o.NAME,
  i.rowcnt
FROM sysindexes AS i
  INNER JOIN sysobjects AS o ON i.id = o.id
WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0
ORDER BY o.NAME

Consecutive Days

SELECT
    ID,
    REASON_ID,
    START_DATE,
    DATEADD(day, - ROW_NUMBER() OVER (PARTITION BY ID, REASON_ID ORDER BY ID, REASON_ID, START_DATE), START_DATE ) AS PREV_START_DATE
FROM    
    LOGS

This produces rows

Row  ID   Reason  Start Date Prev Start Date
--------------------------------------------
1    3546 2       2023-06-30 2023-06-29
2    1869 2       2023-06-23 2023-06-22
3    1869 2       2023-06-26 2023-06-24
4    1869 2       2023-06-27 2023-06-24
5    1869 2       2023-06-28 2023-06-24

Now the row with consecutive dates have the same Prev Start Date. We can count PREV_START_DATE to understand the number of consecutive days, max date contains the start of range and min date contains the end of range.

SELECT 
    ID,  
    REASON_ID,
    MAX(START_DATE) AS START_DATE,
    MIN(START_DATE) AS END_DATE,
    COUNT(PREV_START_DATE) AS CONTINUOUS_DAYS
FROM (
    SELECT
       ID,
       REASON_ID,
       START_DATE,
       DATEADD(day, - ROW_NUMBER() OVER (PARTITION BY ID, REASON_ID ORDER BY ID, REASON_ID, START_DATE), START_DATE ) AS PREV_START_DATE
    FROM    
       LOGS
)
GROUP BY
    ID,  
    REASON_ID,
    PREV_START_DATE;