Chapter 12 revisions per tech review

This commit is contained in:
anthonydb 2021-05-20 06:47:41 -04:00
parent 7dac3c10b9
commit 00c744cb65

View File

@ -20,11 +20,9 @@ SELECT
date_part('quarter', '2022-12-01 18:37:12 EST'::timestamptz) AS quarter,
date_part('epoch', '2022-12-01 18:37:12 EST'::timestamptz) AS epoch;
SELECT '2022-12-01 18:37:12 EST'::timestamp AT TIME ZONE 'US/Pacific'
-- Bonus: Using the SQL-standard extract() for similar datetime parsing:
SELECT extract('year' from '2022-12-01 18:37:12 EST'::timestamptz) AS year;
SELECT extract(year from '2022-12-01 18:37:12 EST'::timestamptz) AS year;
-- Listing 12-2: Three functions for making datetimes from components
@ -49,8 +47,8 @@ SELECT
CREATE TABLE current_time_example (
time_id integer GENERATED ALWAYS AS IDENTITY,
current_timestamp_col timestamp with time zone,
clock_timestamp_col timestamp with time zone
current_timestamp_col timestamptz,
clock_timestamp_col timestamptz
);
INSERT INTO current_time_example
@ -66,6 +64,10 @@ SELECT * FROM current_time_example;
-- Listing 12-4: Viewing your current time zone setting
SHOW timezone; -- Note: You can see all run-time defaults with SHOW ALL;
SELECT current_setting('timezone');
-- Using current_setting() inside another function:
SELECT make_timestamptz(2022, 2, 22, 18, 4, 30.3, current_setting('timezone'));
-- Listing 12-5: Showing time zone abbreviations and names
@ -82,10 +84,9 @@ ORDER BY name;
SET TIME ZONE 'US/Pacific';
CREATE TABLE time_zone_test (
test_date timestamp with time zone
test_date timestamptz
);
INSERT INTO time_zone_test VALUES ('2023-01-01 4:00');
INSERT INTO time_zone_test VALUES ('2023-07-01 4:00');
SELECT test_date
FROM time_zone_test;
@ -98,7 +99,6 @@ FROM time_zone_test;
SELECT test_date AT TIME ZONE 'Asia/Seoul'
FROM time_zone_test;
-- Math with dates!
SELECT '1929-09-30'::date - '1929-09-27'::date;
@ -112,8 +112,8 @@ SELECT '1929-09-30'::date + '5 years'::interval;
CREATE TABLE nyc_yellow_taxi_trips (
trip_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
vendor_id text NOT NULL,
tpep_pickup_datetime timestamp with time zone NOT NULL,
tpep_dropoff_datetime timestamp with time zone NOT NULL,
tpep_pickup_datetime timestamptz NOT NULL,
tpep_dropoff_datetime timestamptz NOT NULL,
passenger_count integer NOT NULL,
trip_distance numeric(8,2) NOT NULL,
pickup_longitude numeric(18,15) NOT NULL,
@ -201,8 +201,8 @@ ORDER BY trip_hour;
CREATE TABLE train_rides (
trip_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
segment text NOT NULL,
departure timestamp with time zone NOT NULL,
arrival timestamp with time zone NOT NULL
departure timestamptz NOT NULL,
arrival timestamptz NOT NULL
);
INSERT INTO train_rides (segment, departure, arrival)
@ -222,20 +222,21 @@ SELECT * FROM train_rides;
SELECT segment,
to_char(departure, 'YYYY-MM-DD HH12:MI a.m. TZ') AS departure,
arrival - departure AS segment_time
arrival - departure AS segment_duration
FROM train_rides;
-- Listing 12-13: Calculating cumulative intervals using OVER
SELECT segment,
arrival - departure AS segment_time,
sum(arrival - departure) OVER (ORDER BY trip_id) AS cume_time
arrival - departure AS segment_duration,
sum(arrival - departure) OVER (ORDER BY trip_id) AS cume_duration
FROM train_rides;
-- Listing 12-14: Better formatting for cumulative trip time
-- Listing 12-14: Using justify_interval() to better format cumulative trip duration
SELECT segment,
arrival - departure AS segment_time,
sum(date_part('epoch', (arrival - departure)))
OVER (ORDER BY trip_id) * interval '1 second' AS cume_time
arrival - departure AS segment_duration,
justify_interval(sum(arrival - departure)
OVER (ORDER BY trip_id)) AS cume_duration
FROM train_rides;